if 式
| 対応: | Kotlin 1.0(2016) |
|---|
Kotlin の『if』は文(statement)ではなく式(expression)として使えます。条件分岐の結果を変数に代入したり、関数の戻り値として直接返すことができます。
構文
// 文として使う基本形
if (条件) {
// 処理
} else if (条件) {
// 処理
} else {
// 処理
}
// 式として使う場合(値を返す)
val 変数 = if (条件) 値A else 値B
構文一覧
| 構文 | 概要 |
|---|---|
| if (条件) | 条件が true のときブロック内を実行します。 |
| else if (条件) | 直前の条件が false のとき、追加の条件を評価します。 |
| else | すべての条件が false のときに実行されるブロックです。 |
| if 式 | ブロックの最後の式が値として返されます。三項演算子の代わりに使います。 |
サンプルコード
sample_if_expression.kt
fun main() {
val score = 75
// 基本的な if / else if / else
if (score >= 90) {
println("優秀です。")
} else if (score >= 60) {
println("合格です。")
} else {
println("不合格です。")
}
// if 式として変数に代入する(三項演算子の代わり)
val result = if (score >= 60) "合格" else "不合格"
println(result)
// ブロックを使う場合、最後の式が値になる
val grade = if (score >= 90) {
println("優秀!")
"A"
} else if (score >= 70) {
println("良好!")
"B"
} else {
"C"
}
println(grade)
// 関数の return でも if 式が使える
val x = 10
val abs = if (x >= 0) x else -x
println("絶対値: $abs")
// null チェックにも使える
val name: String? = "Kotlin"
val greeting = if (name != null) "こんにちは、$name" else "名前がありません"
println(greeting)
}
if_expression.kt
kotlinc if_expression.kt -include-runtime -d if_expression.jar java -jar if_expression.jar 合格です。 合格 良好! B 絶対値: 10 こんにちは、Kotlin
よくあるミス
sample_if_mistakes.kt
fun main() {
val score = 75
// 式として使うのに else を書かない
// val grade = if (score >= 60) "合格" // コンパイルエラー(else が必要)
// ブロック形式で最後の式以外を戻り値と勘違いする
val label = if (score >= 90) {
println("優秀") // この println は戻り値ではない
"A" // これが戻り値
} else {
"B"
}
println(label) // B
// 式ではなく文として書いて変数に代入しようとする
// var result: String
// if (score >= 60) result = "合格" else result = "不合格" // これは動くが冗長
// val result2 = if (score >= 60) "合格" else "不合格" // こちらが Kotlin らしい書き方
// Unit を返すブロックを式として使う
// val x = if (score > 0) println("正") else println("非正")
// x の型は Unit になる。意図せず Unit を受け取るケースに注意
val x = if (score > 0) println("正") else println("非正")
println(x) // kotlin.Unit
}
コンパイルして実行すると次のようになります。
kotlinc sample_if_mistakes.kt -include-runtime -d sample_if_mistakes.jar java -jar sample_if_mistakes.jar B 正 kotlin.Unit
概要
Kotlin には Java の三項演算子(『? :』)がありません。その代わりに『if』を式として使うことで同じ処理を書けます。式として使う場合は必ず『else』ブランチが必要です。『else』がないと値を確定できないためコンパイルエラーになります。
複数条件の分岐には『when 式』が適しています。Nullable 型との組み合わせには『?: エルビス演算子』も便利です。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。