6. 変数の宣言(varとval)
var x = 1 // ≒ var x :Int = 1
var y = 2 // ≒ var y :Int = 2
val z = x + y // ≒ val z :Int = x + y
println(z)
varで変数(変更可能)を宣言
Javaの通常の変数と同じ
変数の型は省略可能(右辺の型から推論される)
valで変数(変更不能)を宣言
Javaのfinalな変数
変数の型は省略可能
10. whileによる繰り返し
var sum = 0
var i = 0
while(i < args.length) {
sum += args(i).toInt
i += 1
}
println(sum)
コマンドライン引数の合計値を計算
forよりも冗長だが、forよりも高速
性能をチューニングしたいときに使う
21. パターンマッチング(1)
println(args(0) match {
case "apple" => "りんご"
case "grape" => "ぶどう"
case "peach" => "桃"
case _ => "その他"
})
式 match { case パターン => ... }
switch(式) { case 定数: ... }に相当
_はdefault相当
値を返すことができる
switch文をより強力にしたようなもの
22. パターンマッチング(2)
println(args match {
case Array("foo","bar") => "FooBar"
case Array("bar","foo") => "BarFoo"
case Array(name) => name
case _ => "default"
})
パターンにマッチした値を変数に束縛可能
1要素の配列について、要素をnameに束縛
構造を持ったデータをパターンマッチに使える
コレクションなど
23. Case Class
abstract class Exp
case class Add(l :Exp, r :Exp) extends Exp
case class Num(v :Int) extends Exp
def eval(exp :Exp) :Int = exp match {
case Add(l, r) => eval(l) + eval(r)
case Num(v) => v
}
println(eval(Add(Num(1), Num(2)))) // 3
caseをclassの前に付加して定義
名前(...)でインスタンスが生成可能
パターンマッチに使える