DelFusa Blog 総本山

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

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

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

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

≫ EDIT

化け物コーディング


          ,,,,,,,,∧,,∧    ナギハラエ !
        @′ ミ,,゚Д゚ミつ
        ,;と;,,;;;;;;;;U;;;;;;彡;;,,,,  
     、,,;ミ;;          "''''彡'    フサフサ
    、、ミ'' ,         ,,,  "ミミ
    ミ    ,             ミミ
  、ミ゙゙   彡  ミ   ;;   ●   ●ミ
  、ミ    彡  ミ            ミミ
  ミ  ,,  彡;;;;;;;;ミ           ▼ミミ
  ミ                  ,,,,_人ミミ
  ''';ミ                   ミミ
  ''''ミ                  ミミ    
    ''''ミ             ;;;ミミ
      "〃;;;,,,,彡  ミ ミ,,ヾミミ
         ;彡  ミ ミ
         彡(巛ミ》彡ミ》



いまからあなたは Delphi界における封印された黒歴史を目の当たりにするでしょう。

後世のDelphi使いの中には「Delphiもfor文の制御文字を前方宣言なしに使えるように構文拡張をしていた時代もあったんだ。」そう語る者もいるかもしれません。
だけど、実際には、For文は、制御変数Iをローカルに宣言しなければ使えない。

var宣言のいらない制御変数の使えるfor、
.NETでC#やVBやPrismじゃあるまいし、そんな構文が許された事など、DelphiWin32コンパイラの歴史からありえないはず。
いったい、その黒歴史当時のDelphi使いは何を見てしまったのでしょうか。

そう。そんな化け物コーディングがこれです。


for文を超えた、fooooooooooor!フォーーーーーーー!構文です。



・・・・あ、間違った、forEXって名前にしたんだった。

  var
   value: Integer;
  begin
   value := 0;
   forEX.I := 1; while toEX.I(9) do
   begin
    value := value + varEx.I;
   end;
   Check(45, value);


Valueは単なるローカル変数なので、var宣言していますが、Iという制御変数は宣言なしに使っていて・・・
例によって、Check関数は、45とvalueが一致しているかどうか確認するだけの関数。
つまり、Checkの時点ではvalueは45と確認しています。

えっとえっと・・・

toExは、第二引数として、次のようにSTEP数も指定可能で、途中でvarEx.Iにアクセスして自在に変更もできます。

  value := 0;
  forEX.I := 10; while toEX.I(100, 5) do
  begin
   value := value + varEX.I;
   inc(varEX.I, 2);
   varEX.I := varEX.I + 3;
  end;
  //制御変数i := i + 10;している
  check(550, value);


Continueもbreakも可能で。
  value := 0;
  forEX.I := 10; while toEX.I(1000, 5) do
  begin
   if varEX.I mod 10 <> 0 then continue;
   value := value + varEX.I;
   if 100 <= varEX.I then break;
  end;
  Check(550, value);


DownToも可能です。
  value := 0;
  forEX.I := 10; while down_toEX.i(0) do
  begin
   value := value + varEX.I;
  end;
  Check(55, value);

DownToはデフォルト引数が-1で、STEP=-10でも書く事ができます。
  value := 0;
  forEX.I := 100; while down_toEX.i(0, -10) do
  begin
   value := value + varEX.I;
  end;
  Check(550, value);

ループを抜けた後の、制御変数の値も保障されます。

そもそも、forEx、ToEx、down_toExという名前も好きに付け替えてもいいでしょう。
自分で独自に拡張してしまえば
fooooooooor、でも、tooooooo、でもいいですよ。

実装は、また次回。




生き物コーディングというサイトがあります。

生き物コーディング
http://esv.cocolog-nifty.com/


TEditorをunicode対応にしてしまったという超すごい方のサイトです。

TEditorのunicode対応は、DEKOさんが引き継いでさらに改善したようですが、どちら様もすさまじいところっす。


生き物コーディングっていうサイト名があまりにもかっこよかったので、ずっと憧れていました。
「私、先輩にずっと憧れていました!」っていう部活女子な気分なので、今日のタイトルはぱくりました。


スポンサーサイト

| 未分類 | 00:05 | comments:0 | trackbacks(-) | TOP↑

COMMENT















非公開コメント

PREV | PAGE-SELECT | NEXT

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