DelFusa Blog 総本山

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

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

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

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

≫ EDIT

途中で変数宣言

さて、Delphi Prism 似、構文拡張をWin32版でも使っていきたい、DelFusaBlogです。
とりあえず、for文はおいといて、もっと多用されている、こっちですよ。

var宣言!


____________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄
             (~) チリンチリン
              ノ,,

   ∫,,,,,,,,,∧,,∧     アツイネ
  ⊂,,,,,,,,,,,,つ゚Д゚ミ⊃旦
 l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
   ̄| .| ̄ ̄ ̄ ̄ ̄ ̄ ̄| .| ̄
   ^^^          ^^^



  procedure AAA;
  var
   s: String;
  begin
  end;

当たり前の説明をわざわざしたくないのですが、
begin-endがいくら長くなったとしても、procedureとbeginの間のvar部分に変数を宣言しなくてはいけません。

Delphiを使う人には当たり前でも、VB.NETなどを使う人には、ちょっと面倒だと思う事かもしれません。

俺でも面倒だもん。

画面内に変数宣言がない場合、上にずらして宣言して、下に戻ってコードを書いていく、なんてことをしなくてはいけません。

長い関数を書くなという話もよくいわれますが、短い関数だけ書いてなりたつほどに、経験が少ないわけではないので、やっぱり、文の途中で、var宣言したくなって仕方有りません。

関数の一部分をコピペする場合も、前方変数宣言部分まで別でコピペしないといかんわけっすよ。


Delphi Prism の実装は、そんな人にもよく考えられた実装です。

Var(キーワード) - Delphi Prism
http://prismwiki.codegear.com/ja/Var(キーワード)

インラインでの、var宣言や型推論での宣言はむずかしいですが、
Win32でも、ちょっとした工夫で、文の途中での、var宣言は行うことができてしまいました。


まあ、いつものように、こっそり偽装拡張だから、落ち着いて見とけ。


 \  /        
  (⌒)
/ ̄ ̄|         ∧,,∧    オチツイトケ
| ||.  |      (w)ミ゚Д゚;彡  
\__|     .  とミ    ミ   
 |   |  ┬─┬⊂⊂_人ミ   



途中で宣言するときに、

  with var_A_Integer do
  with var_B_Integer do
  with var_C_Integer do
  begin

  end;

このようにしておくと、begin-end間だけ、A/B/Cの変数が使える。と。そういう仕組みです。





動作確認、テストコードです。


  procedure testVarialbleFunc;
  var
   K: Integer;
  begin
   with var_J_Integer do
   with var_I_Integer do
   begin
    Check(0, I);
    Check(0, J);
    Inc(I);
    Check(1, I);

    for K := 1 to 9 do
     Inc(J);
    Check(9, J);
    
    with var_I_Integer do
    begin
     Check(0, I);
     Inc(I, 10);
     Check(10, I);
    end;
    Check(1, I);
   end;
  end;

with で、何か妙なものをくるんでいて、その妙なものがあったら、IやJが使えるようになりますよ。

var_I_Integerの妙なものの実装です。どーーーぞ。

  unit variable;
  interface

  type Tvar_I_Integer = record var I: Integer; end;
  function var_I_Integer: Tvar_I_Integer;

  type Tvar_J_Integer = record var J: Integer; end;
  function var_J_Integer: Tvar_J_Integer;

  implementation

  function var_I_Integer: Tvar_I_Integer;
  begin
   Result.I := 0;
  end;

  function var_J_Integer: Tvar_J_Integer;
  begin
   Result.J := 0;
  end;

  end.


var_S_Strind でも、 var_I_String でも var_str_String 、 var_SearchIndex_Integer
var_Value_Integer でも、なんでも実装に追加してやってみるといいかも。
自分のいつも使う変数名を事前にすべて追加しておくと、いいかもね~~


もはや、日本語文章の読めない英語Delphiユーザーなどにとっては、わけがわからないDelphiとは思えないソースコードになってきますね。

日本語Delphiユーザーだけ、途中で変数宣言ができるTechnicを身につけちゃってください。ミ・w・彡
スポンサーサイト

| 未分類 | 23:44 | comments:0 | trackbacks(-) | TOP↑

COMMENT















非公開コメント

PREV | PAGE-SELECT | NEXT

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