[scala][java][tutorial] Scala本を読む 7

今回は制御構造なんだってさ
制御構造に「帰り値がある」んだってさ

  • 7.1 if

3項演算子っぽい

val filename = 
  if (!args.isEmpty) args(0)
  else "default.txt"
  • 7.2 while

whileも返り値がある。"()"(Unit値)、javaのvoidっぽいもの。
値を返さない(=内部でvarの更新処理がたいていはいる)ので、whileはあまり使わないほうがいい。

あと、以下の処理は利用できない。
代入の結果はscalaではUnit値になり、Unit値と""の比較は常にtrueになってしまうため。

while( (line = readLine()) != "")
〜
  • 7.3 for
    • 7.3.1

繰り返しに、toとuntilを使える

(iはval変数)
for(i <- 1 to 4) ⇒ 1,2,3,4
とか
for(i <- 1 until 4) ⇒ 1,2,3
    • 7.3.2 フィルター

for文の実行をコレクションのサブセットに適用したいとき

for(i <- 1 to 10 if i%2==1) println(i) ⇒ 1,3,5,7,9

forの入れ子は()の中に<-を追加するだけ。

    • 7.3.4

val,varを使わず、いきなり代入するとfor内だけで使える変数ができる。

    • 7.3.5 yield

for(〜) yield tmp {}
tmpにforの処理後のコレクションが格納される(場所注意)

  • 7.4 try

javaとあまり変わらない。ただし
finally節の処理結果は返り値に反映されない。(fileのcloseなどにのみ利用すべき。)

  • 7.5 match

case文があらゆる型やその他のものに利用できる。
breakを書かなくていい。

  • 7.6 break,continue

関数形と合わないのであまり使わない。

  • 7.7 変数のスコープ

より内側のスコープで、外側で使われている変数を再度定義できる。

{
  var a = 10;
  {
    var a = 5
  //a=5
  }
  //a=10
}