2009年4月28日火曜日

Getting Started with Delphi and C++Builder 2009

エンバカデロさんのブログで、Dee Ellingさんから
Getting Started with Delphi and C++Builder 2009の
案内
が出ています。

製本したものは、Lulu.comから購入可能で、PDF版が
ドキュメントサイトからダウンロード可能です。

内容は、初めてRad Studioを使うた人のための
IDEの使い方のガイドとなっています。

HELPはなんだかんだ言って、読み物としては
読みにくいものなので、このようなものがあると
大変助かります。

日本語版も是非欲しいところです。

2009年4月12日日曜日

僕の使っている言語でもできるんです。(その1)

遅ればせながら『More Joel On Software』をよんでいます。

そのなかで、「君のプログラミング言語で、これ、できる?」と
題して、無名関数をあつかっていたのでDelphi2009で書いてみました。
今回はその前半部分です。

話の流れは、『More Joel On Software』を参照にしてください。

まづは、関数を使わない例

0001 program Project1;

0002

0003 {$APPTYPE CONSOLE}

0004

0005 uses

0006   SysUtils;

0007

0008 begin

0009   try

0010   { TODO -oUser -cConsole Main : ここにコードを記述してください }

0011   WriteLn('スパゲッティが食べたい!');

0012   WriteLn('チョコレートムースが食べたい!');

0013   except

0014     on E:Exception do

0015       Writeln(E.Classname, ': ', E.Message);

0016   end;

0017 end.

0018

0019



食べたいが一緒だから関数化して

0001 program Project2;

0002

0003 {$APPTYPE CONSOLE}

0004

0005 uses

0006   SysUtils;

0007

0008 procedure SwedishChef(food : string);

0009 begin

0010   WriteLn(food + 'が食べたい');

0011 end;

0012

0013 begin

0014   try

0015   { TODO -oUser -cConsole Main : ここにコードを記述してください }

0016     SwedishChef('スパゲッティ');

0017     SwedishChef('チョコレートムース');

0018   except

0019     on E:Exception do

0020       Writeln(E.Classname, ': ', E.Message);

0021   end;

0022 end.

0023

0024



ここまでは、今までのDelphiでも可能です。

従来の手続き型で呼び出す関数を切り替えて

0001 program Project3_1;

0002

0003 {$APPTYPE CONSOLE}

0004

0005 uses

0006   SysUtils;

0007

0008 Type

0009   TTakeSometingProc = procedure( S : String);

0010

0011 procedure PutInPot(food : string);

0012 begin

0013   Writeln(food);

0014 end;

0015

0016 procedure BoomBoom(food : string);

0017 begin

0018     Writeln(food);

0019 end;

0020

0021 procedure Cook(food1,food2 : String; aTakeSometingProc : TTakeSometingProc);

0022 begin

0023   Writeln(food1 + 'を取る');

0024   aTakeSometingProc(food1);

0025   aTakeSometingProc(food2);

0026 end;

0027

0028 begin

0029   try

0030   { TODO -oUser -cConsole Main : ここにコードを記述してください }

0031     Cook('ロブスター','水',PutInPot);

0032     Cook('チキン','ココナッツ',BoomBoom);

0033   except

0034     on E:Exception do

0035       Writeln(E.Classname, ': ', E.Message);

0036   end;

0037 end.

0038



これも問題なくうごきます。

手続き型を無名メソッドの宣言に書き換えて

0001 program Project3_2;

0002

0003 {$APPTYPE CONSOLE}

0004

0005 uses

0006   SysUtils;

0007

0008 Type

0009   TTakeSometingProc = reference to procedure ( s : String);

0010

0011

0012 procedure PutInPot(food : string);

0013 begin

0014   Writeln(food);

0015 end;

0016

0017 procedure BoomBoom(food : string);

0018 begin

0019     Writeln(food);

0020 end;

0021

0022 procedure Cook(food1,food2 : String; aTakeSometingProc : TTakeSometingProc);

0023 begin

0024   Writeln(food1 + 'を取る');

0025   aTakeSometingProc(food1);

0026   aTakeSometingProc(food1);

0027 end;

0028

0029 begin

0030   try

0031   { TODO -oUser -cConsole Main : ここにコードを記述してください }

0032     Cook('ロブスター','水',PutInPot);

0033     Cook('チキン','ココナッツ',BoomBoom);

0034   except

0035     on E:Exception do

0036       Writeln(E.Classname, ': ', E.Message);

0037   end;

0038 end.

0039



手続き型の仮引数に対する本引数をコードブロックにすると

0001 program Project4_1;

0002

0003 {$APPTYPE CONSOLE}

0004

0005 uses

0006   SysUtils;

0007

0008 Type

0009   TTakeSometingProc = procedure( S : String);

0010

0011 procedure PutInPot(food : string);

0012 begin

0013   Writeln(food);

0014 end;

0015

0016 procedure BoomBoom(food : string);

0017 begin

0018     Writeln(food);

0019 end;

0020

0021 procedure Cook(food1,food2 : String; aTakeSometingProc : TTakeSometingProc);

0022 begin

0023   Writeln(food1 + 'を取る');

0024   aTakeSometingProc(food1);

0025   aTakeSometingProc(food2);

0026 end;

0027

0028 begin

0029   try

0030   { TODO -oUser -cConsole Main : ここにコードを記述してください }

0031     Cook('ロブスター','水',PutInPot);

0032     Cook('チキン','ココナッツ',BoomBoom);

0033   except

0034     on E:Exception do

0035       Writeln(E.Classname, ': ', E.Message);

0036   end;

0037 end.



これは、コンパイルエラーになります。



無名メソッド型を使えば、コンパイルがとおります。

0001 program Project4_2;

0002

0003 {$APPTYPE CONSOLE}

0004

0005 uses

0006   SysUtils;

0007

0008 Type

0009   TTakeSometingProc = reference to procedure ( s : String);

0010

0011

0012 procedure Cook(food1,food2 : String; aTakeSometingProc : TTakeSometingProc);

0013 begin

0014   Writeln(food1 + 'を取る');

0015   aTakeSometingProc(food1);

0016   aTakeSometingProc(food2);

0017 end;

0018

0019 begin

0020   try

0021   { TODO -oUser -cConsole Main : ここにコードを記述してください }

0022     Cook('ロブスター','水',procedure(food : string)

0023                           begin

0024                             WriteLn(food + 'を鍋に入れる');

0025                           end

0026                           );

0027     Cook('チキン','ココナッツ',procedure(food : string)

0028                             begin

0029                               WriteLn(food + 'を撃つ');

0030                             end

0031                           );

0032   except

0033     on E:Exception do

0034       Writeln(E.Classname, ': ', E.Message);

0035   end;

0036 end.

0037

2009年4月11日土曜日

コンバータ

RemObjects社が、C#のコードをDelphi Prism(Oxygen)のコードに
コンバートするツール
を作ったようです。(最初のバージョンがリリース
されたようです。)

また、SVN Repsostoriesを公開したようです
。

追伸 Delphi FeedのLookが変わっています。
Stack OverFlowのようなLookになっています。
個人的には、新しいLookは良いと思います。

新書版かペーパバック版が欲しいです。

遅くなりましたがDelphi 2009 Handbook日本語版を
読みました。

この手の本は、実際にコードを打ち込んだり、
サンプルで動作を確認しながら読むのが
筋だと思うが、個人的には通勤電車の中で
読むことが多い。

その時に、気になるのが本の大きさ。
一般的な大きさではありますが、
満員電車のなかでたったまま頁を
送るにはちょっとつらいです。

そこで、値段は同じか高くても良いから
新書版かペーパバック版の
Delphi 2009 Handbookがあったら良いな
と思ったりします。

そもそも、満員電車で読むなと言う話も
ありますので、こんなことを思うのは
自分だけかな?

2009年4月10日金曜日

ほんとかな?

C#の機能に関するブログですが、このブログによれば、

DelphiのほうがVC++より優れているのがMSの公式見解らしいです。

まあ、Delphi2が発売されてからしばらくの間の"凄まじい”ほどの
引き抜き工作を見ればなんとなく明らかなんですが・・・・

こういった、感想をもたれたかたもいるみたいですし
(Action Listはヘジルスバーグさんがいなくなってから
実装された機能)

個人的には、Delphiは過小評価されている製品だと思うので
もっと正当な評価がされるべきだと思う

偶然見つけた記事

2chはあまり詳しくはありませんが

こういった、Delphi製のアプリケーションが
大々的に紹介されることは良いことだと思います。