Swanman's Horizon

性欲をもてあましつつなんらかの話をするよ。

for-in-doにもっと頑張ってもらう。

var
  s: string;
for s in ['a', 'b'] do
  ...

ふと何気なくこのようなコードを書いたら構文チェックが通ったので、「あれ?これ何気に便利じゃね?」と思ったら致命的エラーとやらでコンパイルは通らず。がっかり。

でももしやと思い次のようなコードを試してみるとコンパイル成功。

var
  i: Integer;
for i in [2..16] do
  ...

どうやらブラケット([と])は配列コンストラクタではなく、

if value in [hoge, huga] then
  ...

このような集合型の定義として機能してるみたい。なので必然的に扱える数は255以下に制限されるけど、逆に言えば次のようなコードが書けるということに。

for i in [2,8,9] do
  Writeln(i);

> 2
> 8
> 9

さらにfor-in-doが列挙できるのは集合型以外に動的配列があることを思い出せば、以前紹介した「動的配列をCreateする」を使用して一番最初のコードも実現可能に。

for s in TArray<string>.Create('foo', 'bar') do
  Writeln(s);
> foo
> bar

ちょっとしたコードを書くときに使えそう。というかもう使ってた。