2012年6月25日月曜日

[Scala] For文あれこれ

For文の書き方についてのメモその1
まずは基本形
for (i <- 1 to 5) print("*")
変数の型宣言もちゃんと書くとこんな感じ。
for (i: Int <- 1 to 5) print("*")
わざわざ <- なんて持ち出さないで普通に = で書かせてくれればいいのに。
(追記:実は、Range オブジェクトだった。 → 数値指定のfor文について

オブジェクトのループはこう。
val a = Array("x", "y", "z");
for (s: String <- a) print(s);
foreach文を使うとこんな感じになる。
Scala的にはこっちなのだろうか。
val a = Array("x", "y", "z");
for (s: String <- a) print(s);

a.foreach((s:String) => print(s));
a.foreach(s => print(s));
a.foreach(print(_));
a.foreach(print);
上から、

  • ちゃんと書いた場合
  • 変数の型を省略した場合
  • 匿名変数を使った場合
  • 変数も省略した場合

4番目あたりになるとわかっていないと意味不明なのでよほど自明な場合以外はあまり使いたくない。基本的にScalaは省略記法がたくさんあるので手を抜こうと思えばどんどん抜ける。
自分で書いたコードを自分で使うだけならいいけど、Teamで使う場合には、それなりにCoding Ruleをきちんと整備しないと訳が分からなくなりそう。
ある程度までは可読性、生産性ともに上がると思うが、度を過ぎた省略は個人的には好きではない。

foreachの引数は関数なので本体部分が複文にもなる。
その場合はこんな感じに。

a.foreach((s:String) => { val ss = s + "*"; print(ss) })
あまり長くなると見にくくなるのでやっぱり拡張For文形式が好きかも。

0 件のコメント:

コメントを投稿