DelFusa Blog 総本山

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

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

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

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

≫ EDIT

Delphi Win32で、requireとensure

さてさて、Delphi Win32 を Delphi Prism の拡張構文仕様をいろいろ取り込んでみます。

ちまたのC++界では、プログラミングの魔導書という本が出回るらしくて、業界が活気づいてよさげな事なのですが、Delphi界でも俺が魔法をみせましょう(w


    |~ ̄ ̄|   
    |____†__| .♀     ________
     ミ,,゚Д゚彡.∥  /
    / ~〉†〈/つ <  プリズムってヨシ
   ノ  ノ|  |...∥   \_______
  ´~(__),__)∥ゝ  


足下がモナーなのは気にしないでくれ。

神業というか、力業というか、面白いものを見せてやりますよ。


Delphi Prism vs. CSharp
http://delwiki.info/?DelphiPrism%2FDelphi%20Prism%20vs.%20CSharp

Delphi Prism 機能評価ガイド
http://edn.embarcadero.com/print/39118

クラス契約 という欄に、require ensure が紹介されています。

  method MyObject.Add(aItem: ListItem);
  require
   assigned(aItem) : 'List Item for MyObject cannot be nil';
  begin
   InternalList.Add(aItem);
  ensure
   Count = old Count +1 : 'MyObject: Count logic error';
  End;

こんな風に書かれています。

意味は分かる?
require で、aItemが定義されている事が確認されて
ensure では、Countが一つ増えている事が確認されています。

これは、Check関数、テストファースト好きな俺としては、見逃せない素敵仕様ですよ。

MyObjectとかを実装するのはちょっと面倒なので、requireとensureを確認するために、こんなコードを適当に作ってみましょう。

  procedure TForm1.Button1Click(Sender: TObject);
  require
   Self.Caption = 'Form1';
   Button1.Caption = 'Button1': 'Button1.Caption = Button1';
  begin
   Button1.Caption := 'Button2';
  ensure
    old.Button1.Caption = 'Button1',
    Button1.Caption = 'Button2': 'Button1.Caption not = Button1',
  end;

こんな感じですかね。テストする意味があまりないコードですが、requireとensureの実装の確認だからよいとしましょう。これを、Win32でも実装してみました。

もっと上手にかける方法はあるかもしれませんが、俺の実装ではWin32版でこのようなコードで動きます。

  procedure TForm1.Button1Click(Sender: TObject);
  begin
   SetOld('Button1.Caption', Button1.Caption);

   require([
    Self.Caption = 'Form1',
    Button1.Caption = 'Button1', 'Button1.Caption = Button1',
   true]);

   Button1.Caption := 'Button2';

   ensure([
    GetOld('Button1.Caption') = 'Button1',
    Button1.Caption = 'Button2', 'Button1.Caption not = Button1',
   true]);
  end;

ちょっと冗長ですかね。

もちろん、実装は、内緒です。次回をお楽しみに。


    |~ ̄ ̄|   
    |____†__| .♀     ________
     ミ*゚Д゚彡.∥  /
    / ~〉†〈/つ <  自分で実装汁
   ノ  ノ|  |...∥   \_______
  ´~(__),__)∥ゝ  


スポンサーサイト

| 未分類 | 20:53 | comments:0 | trackbacks(-) | TOP↑

COMMENT















非公開コメント

PREV | PAGE-SELECT | NEXT

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