読者です 読者をやめる 読者になる 読者になる

クロージャ

JavaSEで入るとか入らないとか含めまだ揺れそうなクロージャだけど、個人的にBGGAの

public static <V> void for each(Iterable<V> collection, { V => void } block) {
    for (V v : collection)
        block(v);
}

が気に入っている。

eachメソッドはジェネリックメソッドで、第二引数にVを受け取り戻り値がないクロージャを受け取る。


で、これの使い方は

int[] ls = {1,2,3,4,5};
int total = 0;
for each(int i : ls)
    total += i;

と、

ls = [1,2,3,4,5]
total = 0
ls.each {|i| total += i }

Rubyで書いたのと比べてかなりコード量が近づいている*1


あと個人的には拡張for文で

for (int i, j : ls1, ls2) {
    ...
}

なり、

for (int i, int j : ls1, ls2) {
    ...
}

なり書かせて欲しいんだけど、ここら辺は手を入れる気はないんだろうか。


クロージャはここで各提案の比較が行われているのを参考にした。C3SとかもはやJavaには見えないんですけど。

*1:あくまで部分的に