とうとう完成した拡張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 ループまで拡張してしまいました。
実装は、また、次回ね。
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↑