C言語族の言語はif~else、forといった基本制御構文はほぼ同じ書き方ができることが多いけど、foreach(ループで配列などのコレクションを回す構文)はベースになったC言語には存在しなかったため言語ごとに違いが出て面白いなぁと思い、まとめてみた。
for
//C++
for(auto i=0;i<size(collect);i++)
//C#
for(var i=0;i<collect.Length;i++)
//D
for(auto i=0;i<collect.length;i++)
//Go
for i:=0;i<len(collect);i++
//Java
for(var i=0;i<collect.length;i++)
//JavaScript
for(var i=0;i<collect.length;i++)
# Perl
for(my $i=0;$i<scalar(@collect);$i++)
//PHP
for($i=0;$i<count($collect);$i++)
まずはfor文。
配列の長さを表す構文に個性があることを除けば大体一緒。
foreach
//C++(C++11以降)
for(auto v:collect)
//C#
foreach(var v in collect)
//D
foreach(v;collect)
//Go
for _,v:=range collect
//Java(Java 1.5(J2SE 5.0)以降)
for(var v:collect)
//JavaScript(ES6(ES2015)以降)
for(var v of collect)
//PHP(PHP4以降)
foreach($collect as $v)
# Perl
foreach my $v(@collect)
見事にバラバラで後天的にforにforeachの機能を備えさせる言語も多い(C++,Java,JavaScript)。
個人的にas句でループ変数とコレクションの順序が入れ替わってるPHPがややこしく感じる。
以上、内容はこれだけです。
言語によっては参照の設定の有無もあったり、イテレータ回したり、連想配列に対するものとか細かい挙動は異なるよね。