DelFusa Blog 総本山

プログラミングの話題とかです。

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

Methodが実装できるrecord型、それはもうダークサイドで。


      ブウォン
       {}    
   ∧,,∧ {}   / フォースの暗黒面を学ぶのだ。
  ミ,,゚皿゚ミ|} <  そうすれば、どんなジェダイをも
   U  ,,Φ   \ 凌駕する力を得るだろう。
 コーフォーーコーフォーーー

    エピソードⅢ くらい続きました?



さて、暗黒面……についてのお話。
英語辞書で調べると、dark side です。

どのあたりが、dark?

はい、『recordにメソッドが追加して喜ばしい!』
ことの裏には、実は…


大昔からあった『非推奨のobject型がrecord型になってるだけでは!?』
これ……わかる人には非常にわかると思うんですが
ダークですよねー。

わからない人、ごめんね。読み進めていったらわかる....かな?


object型。、、、Delphiを使っていても知らない人は全くしらない。
文法体系からも存在しているのかしていないのか忘れられ、いまさら誰も使わない、

そう、あのobject型です。

知らない人も多いはずです。


object型の説明はググろうとしても単語がぶつかりまくって
ネット上で見つける事もできない。

このネタ書くために文法を調べまくったりしましたが全くヒットしません。

そもそもDelphi言語の文法にObject型、なんてものが存在したコトすら
闇に葬られている気がします。


[Delphi:59186] Re: 疑問
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=59186
こんな程度か?

書籍だと、ここで売ってるんですけどね。確かこの本で詳しく書かれてます。
Delphi オブジェクト指向プログラミング塚越一雄 販売ページ
http://www.fukkan.com/fk/CartSearchDetail?i_no=13893706

DelphiにはTClassではなくobject型という
高度record型と全く同じようなクラス生成の仕組みは
実は大昔から存在していたのんです。

そんなわけで元の記事、
DelFusaBlog TStringConvert = record
http://delfusa.blog65.fc2.com/blog-entry-103.html
この高度なrecord型をobject型に変更してみました。

下記をみてくださいな。
こんなコード、コンパイル通るの?!


type
 TStringConvert = object //※何これ?
  private
   FText: String;
   FToInt: Integer;
   FToIntExists: Boolean;
   procedure SetText(const Value: String);
  function GetText: String;
  public
   function CanToInt: Boolean;
   function ToInt: Integer;
 end;

{ TStringConvert }

function TStringConvert.GetText: String;
begin
 Result := FText;
end;

procedure TStringConvert.SetText(const Value: String);
begin
 FText := Value;
 FToIntExists := False;
end;

function TStringConvert.CanToInt: Boolean;
begin
 if TryStrToInt(FText, FToInt) then
 begin
  Result := True;
  FToIntExists := True;
 end else
 begin
  Result := False;
  FToIntExists := False;
 end;
end;

function TStringConvert.ToInt: Integer;
begin
 if FToIntExists then
 begin
  Result := FToInt;
 end else
 begin
  Result := StrToInt(FText);
 end;
end;

と・お・り・ま・し・た!
ですが、プロパティは受け付けないみたいっす。
まあ、いいよそれくらい。

そして、イベント実装。

procedure TForm1.Button1Click(Sender: TObject);
var
 sc: TStringConvert;
begin
 sc.SetText('123456');
 if sc.CanToInt then
 begin
  ShowMessage('FToIntが使われます:'+sc.GetText);
  SpinEdit1.Value := sc.ToInt;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 sc: TStringConvert;
begin
 sc.SetText('123');
 if sc.CanToInt then
 begin
  ShowMessage('FToIntが使われます:'+sc.GetText);
  SpinEdit1.Value := sc.ToInt;
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 sc: TStringConvert;
begin
 sc.SetText('321');
 ShowMessage('FToIntは使われません:'+sc.GetText);
 SpinEdit1.Value := sc.ToInt;
end;

ぉぅよ!全部、コンパイルが通り、動作はそのままじゃないっすか!


うっひゃ~~なんだかなあ..........orz........
D2006以前の大昔から実装スタイルを変える工夫はできたわけです。
生成されるバイナリは同じじゃないんすか?
object型とメソッド付属の高度なrecord型は!


非推奨だっただけで!誰にも使われなかったobject型!
闇の歴史みたいになったオブジェクト型。


非推奨。恐ろしい言葉です。滅びの言葉でしょうか?

"いつか消え去るかも知れない"それすなわちヒスイショー

そういう恐怖が、
Delphi界でobject型が使われるのを
完全に消滅させてしまいました。
存在するけど誰も使わない。誰も使っているのを見たことないでしょう?

今、高度record型として復活しているけど
実際はobject型と何が違うかというと"ヒスイショー"かどうかだけ。


そして、"いつか消え去るかも知れない"、その言葉は


これが、ソフトウェア開発業界全体のDelphiに適応されるかもしれな....

(((( ;゚Д゚)))ガクガクブルブル

恐ろしい恐ろしい、恐ろしい恐ろしい、恐ろしいですな~~~。

恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい

恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい

恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい恐ろしい


・・・


               
    ∧,,∧     まっ
    ミ ゚Д゚ミ    おでん食って餅つけ
    (ミ   ミつ-□●△
    ミ   ミ
    し''`J 



恐怖心を煽ってしまいましたか?


別に風前の灯火ではないでしょうが、
ぱっとしない面もあって昔っから盛り上がってもいかないDelphiですな。
こういう投稿もあったりします。

Delphiの先行きはどうなるのでしょう#2
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200801/08010052.txt

不安ですか?不安ですね?何年前から不安がってますか?
1年間?2年間?
ず~~っとこれから?

その割に別に未だにDelphi使っていて楽しくやってんでしょ?みなさん。
Vistaにもいち早く対応して、コーディングできるわけっすよ。
Win32で。unicodeにも対応していくし。Win64にも対応できる。
.NETも動くし(WinFormは誰も使わないから退却気味ですが)
Win32でCGIとか、IISでISAPIとか、アパッチモジュールまで作れたり。
DBだって全接続できるんじゃないでしたっけ?
単一配布DBまでくっついちゃった?

いや、そもそも、大昔からVCLはC++でまで動くようにされてしまっているわけで。
あれはもはやDelphiのC++進出だったかと。


何から何まで動作しますのに。なんか不安?

マイクロソフトのOSでは、

(VB以外は)ヒスイショー

(.NET以外は)ヒスイショー

(CodeGear(Borland)1社だけの提供ソフトは)ヒスイショー


なにそれ?ドラゴンクエストかファイファンの魔法の名前っすか?
あなたの体をこわばらせる為の魔法の言葉?

あなた以外の大勢の人は、あなた以上に体をこわばらせてしまう言葉ですよね。
ヒスイショー

あなたも、ヒスイショー魔法ににやられてる?


何年前から"いつか消え去るかも知れない"って言われてました?
あなたのまわりには最初っから言ってた人もいましたよね。
だってMS標準でもないし….NETだったらやっぱしC#だし…

ある程度同意しますよ。

だけど、それは、単に"その人"の"意見"であって、それは"真実"、なんですか?

"真実"、ではないよね?きっと。



今、現在Delphi使ってて、実際、たのしんじゃうわけでしょ?
アプリ作ると、あっさり高速、簡単によいもの作れるでしょ。

実際、Delphiの事しか書いてない
うちのページみてるくらいだし。気になるっしょ。Delphiの開発効率のよさ。


   ∧,,∧
  ミ,,  ミy━~~
  (o   ミ  
   ミ@ ミ   他の大勢のみんなに追従して凡庸に。無難に。
   ∪''∪   

    そういう普通の安心安全な道を選ぶ人なら
    ヒスイショー呪文は絶大な効果があるかもね。

    でもまあ、
    Delphi-ファンなら誰しも
    そんなヒスイショー呪文には捕らわれずに
    今まで乗り越え、技術を学んできたんじゃない?


ヒスイショーで "いつか消え去るかも知れない"
それで体がこわばる!恐怖に惑わされる!

そんなの乗り越えて
日々、いい物を作っていきましょう。


   ∧,,∧
  ミ,,゚Д゚ミy━~~
   U   ミ
 @ミ   ミ   俺ラは
   ∪''∪   いい道具を知っている。
        限界キリキリまで活用すりゃいいぜ。


そ。これが、ダークサイドでした。

ヴェーダー卿でもなんでもいいけど、ダークサイドに捕らわれて
恐怖とおびえに支配されて体と心をこわばらせて、嘆いたり

人やメーカーや製品を必要以上に無価値なものだとおとしめたり
そういうダークサイドは必要ないですよ。


さーーて、内容がくどかったのでお口直しに

可愛いのをみつけたのでリンクしておきます。猫ですね。
http://ext-web.edu.sgu.ac.jp/HIKO/Prog03/SenpaiKyozai/Yuki_Hashino/UPLOAD/page2_1.html
スポンサーサイト

| 未分類 | 02:21 | comments:5 | trackbacks:0 | TOP↑

COMMENT

Delphi Q & A掲示板 から、飛んで来ましたよ。

あたくしゃ、D2くらいのころからD5まで(いや、今でもD5だけど)、当時からobject型使っていました。

非推奨?
そんなことは、二年くらい前に知ったくらいで、ずっと当たり前のように使ってましたよ。
なんか、人のソースにそういう記述あったから、「おぉ、Record型よりすげぇ!」って、当たり前に使っていた。
「消えるかもしれない」ってことで、Record型を使うように心がけてきていただけに、この仕様変更はちょっとくやしい。
・・・と思う今日この頃。

| コメントで名乗る名前がない | 2008/01/25 08:24 | URL | ≫ EDIT

おお!object型使いが、いらっしゃいましたか!
信じられん。天然記念モノですね。世界遺産レベルか?(w

高度record型としてヒスイショー解除され、復活してよかったです。

伝えたいことを補足しますと

結局はobject型でも同じ事ができたのに、ヒスイショー魔法によって、使われなかった。それくらいヒスイショー魔法は結構な力をもつものだけど、そんなのに惑わされずに、場面場面で乗り越えて使っていけば、それはそれでいいんじゃないかしら。

ということです。

「これは使っちゃまずいんじゃないのか?ヒスイショーだし、いつ消えるかわからないし」

という恐怖心が本来のモノの良さ、を曇らせる色眼鏡。っての人や自分にかけてしまうものなのです。

※俺っていいこというなあ~~(w

| ミ・д・彡 | 2008/01/25 10:34 | URL | ≫ EDIT

やっぱり、メソッドだけじゃなくて、コンストラクタとデストラクタが欲しいよね。
そうすると、C++の静的なクラス利用と同じように扱えるし。

| 774 | 2008/01/26 02:10 | URL | ≫ EDIT

>やっぱり、メソッドだけじゃなくて、コンストラクタとデストラクタが欲しいよね。

激しく同意です。
コンストラクタではないですが、
フィールドの初期化処理(メモリゼロ埋め)は、横取りさせて出来るようです。
TWC 第四部 さんところで紹介されてます。
http://twc.xrea.jp/?20080125#comment

| ミ・д・彡 | 2008/01/27 01:49 | URL | ≫ EDIT

object 型は Turbo Pascal の時に導入されたオブジェクト指向に基づいた型ですね。Delphi では、object 型が拡張されて class 型になった、ということです。
なので、object 型は後方互換で残されていて、もちろんコンパイルは通ります。
record 型にメソッドの追加ができるのは C++ っぽいやり方をまねした物で、別物ですよね。
スタック上にインスタンスが確保されるとか、構造そのものが違うと思います。

| pik | 2008/01/30 12:38 | URL | ≫ EDIT















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/109-faee8587

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。