menu
書いてる野郎
orebike@gmail.com
Java ならば switch-case 構文で行う多分岐処理 scala の case は 処理が下に流れていかないので break 的な記述は不要である。 アンダースコアは default を表す
この一致判定には unapply というメソッドで一致するかどうかが比較される。
var hoge: Int = 23 hoge match { case 22 => println("22") case 23 => // ここに来る println("23") case 24 => println("24") case _ => println("????????????") }
Java な考えだと型付けが強い言語で型推論も働かせてくれる状態で型で分岐する状況なんてほぼないと思うのだが、 Scala は型自体を作りやすいので、型を値的に使うことが多いのである。考えてみれば Java でも switch する条件は「状況、条件」ではなく「特定値」なのである。 この場合は型で分岐したほうがより強力に拘束することができて安定するのはうなずける。
これは、例外処理のcatch内 で使われてるのとほぼ同じ構文
var hoge: Any = 123 hoge match { case i:Int => println("Int") case s:String => println("String") case _ => println("????????????") }
case での判定のあとに条件を追加できる。つまり Java とかで if else if else if … と延々と書いてたやつを case で書けるようになる。
var hoge: Int = 23 hoge match { case 22 => println("22") case 23 if true => // ここに来る println("23") case 23 if false => // ここに来る println("23") case 24 => println("24") case _ => println("????????????") }
if 同様に戻り値を戻せる