プログラマをやっていると(←やっているのです)、プログラミング言語にこういう機能がほしいなあと思うことがよくある。そういう時は言語を作るのがハッカーらしいのですが、私にはそこまでの能力がないので、この日記にこそっと書きとめておくことにする。
まず、本当にいつも思うのがループ文の書き方に関することである。C言語Javaでプログラムを書く場合ループは次のような感じで書くだろう。


for (int i = 0; i < a.length; i++) {
Object obj = a[i];
...
}
外部イテレータと呼ばれるこの方法は非常に柔軟性が高いしトリッキーな処理が書きやすいので個人的には好きなのだが、やはり近年のスクリプト系の言語の簡略な記述に比べるとやぼったい印象がある。そのためbashJavaScriptのような言語では次のような内部イテレータと呼ばれる手法が主流である(このような表記はJavaでも次のメジャーバージョンアップで導入されるらしい)。

for (Object obj in a) {
...
}
たしかに、やぼったさはないし余計な変数のiを定義する必要がないので美しい。実際、数値計算を伴わないビジネスアプリにおいてはループ中で直接的にiを数値として用いることはないので外部イテレータの方が好ましい。……といきたいのだが、実際にはそうはいかない。なぜなら、一番初めと一番最後だけ処理を変えたいことが多々あるためである。このような処理は、前述の場合だと下のように書くだろう。

for (int i = 0; i < a.length; i++) {
Object obj = a[i];
if (i == 0) {
// 最初だけの処理
}
...
if (i == a.length-1) {
// 最後だけの処理
}
}
困ったことに内部イテレータではこのような処理を書くことができない(わけではないが、そうすると外部イテレータと対して変わらなくなる)。
私はこの問題に対し、次のようなことができてほしいなあと思うのだけれど、こうすると言語仕様が汚くなるしと、なかなか難しい。なにかきれいな解決法はないですかねえ。

for (Object obj in a) {
BEGIN: {
// 最初だけの処理
}
...
END: {
// 最後だけの処理
}
}


押井の短編見たさにテアトル池袋に映画「Killers」を観にいく。もしかして混んでるかもとか思って一時間以上早く行ったが、実際には席が1/4埋まる程度。二週間の短期公開でしかも休日なのにこんなもんですか。まあ、ファンの人はゲストが来る早朝に集中するということなのかもしれん。
映画自体は、制作費の割にはがんばってるけど「世にも奇妙な物語 銃の特別編」以上のものにはなってないよね、という感じ。1800円払う価値はないです。むしろ、面白かったのは映画館に来ていた観客の方かもしれない。なんというか、客層が一貫してないような奇妙な空気があるのである。よくかんがえたら、Killersなんて身に来る一般人なんていないわけで、その場にいるのは映画マニアかガンマニアか押井ファンだけなんだよね。