KotlinLearning: 02-1 式と文
式と文
Kotlinに限った話ではありませんが、プログラミング言語には式(Expressoin)と文(Statement)という似通った二種類の要素があります。
式(Expression)
式はプログラミング言語が解釈し別の値を生成する1つ以上の明示的な値、定数、変数、演算子、及び関数の組み合わせです。
val a = if(条件) { 1 } else { 0 }
これはもっと短く書くことができます。
val a = if(条件) 1 else 0
関数の本体が1つの式でできている場合も、波カッコとreturn文を省略し、その式自体を関数の本体とすることができます。
fun max(a: Int, b: Int) = if(a > b) a else b
式は別の式の一部として使用できる値を持ちます。
文(Statement)
文はプログラムによって実行されるアクションを表す最少の要素で、常にブロックで囲まれ、それ自身の値を持ちません。
Kotlinでは全ての関数は式であり、値を返します。
またJavaでは全ての制御構造は文で成り立っていますが、Kotlinでは繰り返し文(for, do, do-while)を除くほぼすべての制御構造は式で成り立っています。
制御構造が式だということは、制御構造を他の式と組み合わせることができるようになるので、簡潔に表現できるようになります。
その一方でJavaでは値の割り当ては式ですが、Kotlinでは文です。
例えば下記式はJavaでは代入式の結果としてtrueが返されますが、Kotlinでは代入は文ですのでコンパイルエラーになります。
その結果、代入処理と比較処理とで混乱することはなくなります。
if(b = true) {}
ブロック本体
波カッコに本体が入る形で関数が記述されている場合、その関数はブロック本体を持つと言います。
式本体
式を直接返す関数は式本体を持つといいます。
戻り値の型の省略は式本体の関数に対してのみ使用可能で、ブロック本体を持つ関数の場合は戻り値の方を指定し、return文を明示的に記述する必要があります。
参考
Kotlin programmer dictionary: Statement vs Expression
KotlinLang.org: Conditionals
KotlinLang.org: Ranges
Kotlin Conditionals: When and If