if 式

Scala では if は文じゃなくて式なので、値を持つ。
じゃぁ else がなかったらどうなんの?ってことで試してみた。

scala> if (true) 1

scala>

・・・えーっと?

scala> val res = if (true) 1

scala> res

scala> println(res)
()

・・・Unit を返すらしい。もうちょっと親切な出力が欲しいです・・・
で、次に気になったのが else if の扱い。

scala> println(if (true) 1 else if (true) 2)
1

scala>

え、マジで? else if には else ないけど 1 が返って来ちゃうんだ・・・
なら、最初の if の条件を false にすれば 2 が返って来るの・・・?

scala> println(if (false) 1 else if (true) 2)
()

scala>

うがー!なんでじゃ!
ここでふと println を取っ払ってみると・・・

scala> if (true) 1 else 2
res5: Int = 1

scala> if (true) 1 else if (true) 2
res6: AnyVal = 1

scala>

型が違う・・・
つまり、else が無い if 式は Unit を返すので、if (false) 1 else if (true) 2 は普通に Unit を返した、と。
で、if (true) 1 else なので、Int と Unit の共通のスーパークラスである AnyVal が結果型として選ばれた、と。
なるほどー、なるほどー。