GW中はどこにも行けないので、のんびり家でJavaを勉強しています。
rubyのeach文は優秀で、どこにでも使えるのがうれしいので多用してしまいます。ruby使っているともはやrubyでfor文ってどう書くんだっけ?って感じです。
たとえば、配列の中身を出力するとき、こんな書き方ができます。
fruits = ["りんご", "みかん", "バナナ"]
fruits.each do |v|
print "#{v}\n"
end
これがC#でfor文で書くならこんな感じです。
var fruits = new string[] {"りんご", "みかん", "バナナ"};
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
for文のカウンタで配列のインデックスを回して要素を取り出すオーソドックスな方法です。
そして、Rubyのeachみたいな記法でforeach文というのがあって、こんな感じ書けます。
var fruits = new string[] {"りんご", "みかん", "バナナ"};
foreach (var v in fruits)
{
Console.WriteLine(v);
}
foreach文はIEnumerable
またはIEnumerable<T>
インタフェースを実装しているクラスの要素を取り出すことができます。配列はIEnumerable
を実装しているので使えるとのことのようです。List<T>
などもIEnumerable<T>
を実装しているので使えます。
Javaの場合は拡張for文というのがあるらしくて、こう書くようです。
var fruits = new String[] {"りんご", "みかん", "バナナ"};
for (var v : fruits)
{
System.out.println(v);
}
うーん、わかりづらい。
foreachではなくて同じforで書くんですね。
なお、C#の場合は、Listを使ってラムダ式を使うともう少しスマートに同じことができます。
var fruits = new List<string> {"りんご", "みかん", "バナナ"};
fruits.ForEach(v => Console.WriteLine(v));
ちなみに、今回の主旨とは異なりますが、ただ配列の中身を改行して出力するだけならJoinで十分ですけどね。
var fruits = new List<string> {"りんご", "みかん", "バナナ"};
Console.WriteLine(string.Join("\n", fruits.ToArray()));
個人的には原点であるrubyの記法がお気に入りです。
fruits = ["りんご", "みかん", "バナナ"]
print fruits.join("\n")