fc2ブログ

DelFusa Blog 総本山

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

NEW | PAGE-SELECT | NEXT

≫ EDIT

とうとう完成した拡張For構文(再び)


          ,,,,,,,,∧,,∧    カオ コワイカラ
        @′ ミ;゚д゚彡  
        ,;と;,,;;;;;;U;;;;U;;彡;;,,,,     
     、,,;ミ;;          "''''彡'    ガルルルルル
    、、ミ'' ,         ,,,  "ミミ
    ミ    ,             ミミ
  、ミ゙゙   彡  ミ   ;;   ▽   ▽ミ
  、ミ    彡  ミ            ミミ
  ミ  ,,  彡;;;;;;;;ミ        ,,____▼ミミ  
  ミ                  //W∨w∨
  ''';ミ              (M∧M∧ミ
  ''''ミ               ̄ ̄ ̄ミ  
    ''''ミ             ;;;ミミ
      "〃;;;,,,,彡  ミ ミ,,ヾミミ
         ;彡  ミ ミ
         彡(巛ミ》彡ミ》


さて……………………

世間では XE の話題で餅切りですが、
そんな流れとは裏腹に、

TInterfacedObjectを利用してフル機能実装してしまいました…

拡張For構文。
とうとう、実装してしまいました。
パズルみたいで結構苦労しましたが、できるもんですね。

実用レベル。といくものかどうか。

再帰ループにまで対応とは、ちょっと自分でも驚き。
というか、再帰ループの場合、標準VCL(?)のFor文でも制御変数が
ループ後にかなり不確定要素が高いという事を発見しました。

拡張For文なら、そんな事はないですね。

-----


ForSXを作った時は、こんな構文でした。

  ForSX.I := 0; while toSX.I(5) do try
  begin

  end; finally end_I; end


特に、ループ後のfinally...endがきれいではないので
冗長すぎるのは、どうにかならないかと思っていました。

そこで、withをからめてインターフェースを生成させて
自動破棄変数にしてしまって、
このような構文に変えました。
もちろん、内部実装も全然違います。

 value := 0;
 for_.I := 1; with varI do while to_.I(9) do
 begin
  value := value + I;
 end;

これで、ループ後の finally ... end はなくなります。

 制御変数Iには代入可能。

 loop.I.first: Boolean; で、ループの最初かどうか判定
 loop.I.last: でループの最後かどうか判定
 loop.I.value: で制御変数Iの値をループ後に参照可能
 loop.I.count: で、制御変数とは別に実際のループ回数カウントを取得可能

という拡張機能をモリモリもりこんだ、
forループ拡張です。

ちょっと構文に無茶は生じますが
forとwhile間にwith 宣言くらいなら
俺的には十二分で我慢するっす。

ライブラリ側から for ループまで拡張してしまいました。

実装は、また、次回ね。



スポンサーサイト



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

COMMENT















非公開コメント

PREV | PAGE-SELECT | NEXT