[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
-
- 7.3.3 入れ子
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 }