公開日:2020/01/28更新日:2020/08/03
【Kotlin基礎】Kotlinでwhen式による条件分岐を実装する方法

- when式による条件分岐の実装方法が知りたい。
- JavaのSwitch文との違いが知りたい。
そんな方、いらっしゃいませんか?
本記事では、Kotlinでwhen式による条件分岐の方法をサンプルコードを交えてわかりやすく解説しております。
サンプルコードには、JavaのSwitch文で実装した場合のコードも記載しておりますので、Java経験者の方は、よりわかりやすい記事になっているかと思います。
目次
Kotlinでwhen式による条件分岐を実装する方法
when式の基本的な使い方
Kotlinで条件分岐を実装する際は、ifやwhen式が使用されます。
分岐させる条件が多い場合は、ifではなく、when式で実装した方が可読性が上がります。
Javaにもswitchという似たような処理があります。whenとswitchの違いは、
- caseを使用しない
- breakを使用しなくても良い
- 評価結果を返すことができる
- 任意のオブジェクトで分岐ができる
等があげられます。
when式は、以下のように実装します。
- Kotlin
when(引数) {
値A -> 処理
値B -> 処理
else -> 処理
}
引数が値と同じであれば、その値の処理が実行されます。
どの値にも当てはまらなかった場合は、elseの処理が実行されます。
複数行にわたる処理を実装したい場合は、{}で囲います。
- Kotlin
when(引数) {
値A -> {
処理
}
値B -> {
処理
}
else -> {
処理
}
}
以下は、when式の実装例です。Javaのswitch文で実装した場合のコードも載せております。
- Kotlin
- Java
val i = 2
when(i) {
0 -> println("0です。")
1 -> println("1です。")
2 -> println("2です。")
3 -> println("3です。")
else -> println("その他です。")
}
// 2です。
int i = 2;
switch(i) {
case 0:
System.out.println("0です。");
break;
case 1:
System.out.println("1です。");
break;
case 2:
System.out.println("2です。");
break;
case 3:
System.out.println("3です。");
break;
default:
System.out.println("その他です。");
}
// 2です。
また、when式は、結果を返すこともできます。
- Kotlin
val i = 2
val result = when(i) {
0 -> "0です。"
1 -> "1です。"
2 -> "2です。"
3 -> "3です。"
else -> "その他です。"
}
println(result)
// 2です。
- 複数行の処理を実装する場合は、{}で実装する
- when式は、結果を返すことができる
【公式ドキュメント】 : Control Flow: if, when, for, while – Kotlin Programming Language
カンマ(, )で列挙し、複数の値で同じ処理に分岐させる方法
続いて、「AあるいはBの場合は、○○の処理」というように、候補を複数にする方法を紹介致します。
候補を複数にする場合は、候補をカンマ(, )で列挙します。
- Kotlin
when(引数) {
値A, 値B -> 処理
値C, 値D, 値E -> 処理
else -> 処理
}
では、実装例です。
- Kotlin
- Java
val i = 2
when(i) {
0, 1 -> println("0か1です。")
2, 3 -> println("2か3です。")
else -> println("その他です。")
}
// 2か3です。
int i = 2;
switch(i) {
case 0:
case 1:
System.out.println("0か1です。");
break;
case 2:
case 3:
System.out.println("2か3です。");
break;
default:
System.out.println("その他です。");
}
// 2か3です。
- カンマ(, )で列挙することで、候補を複数にできる
in によるレンジでの判定方法
続いて、in によるレンジでの判定方法を解説いたします。
この判定式は、「引数が0~5の間であれば、○○の処理」といった実装をしたい場合に便利です。
- Kotlin
when(引数) {
in 値A..値B -> 処理
in 値C..値D -> 処理
else -> 処理
}
では、実装例です。
- Kotlin
val i = 7
when(i) {
in 0..5 -> println("0〜5の間です。")
in 6..10 -> println("6〜10の間です。")
else -> println("その他です。")
}
// 6〜10の間です。
ちなみに、判定するレンジが重なっている場合(0..7と5..10がある場合等)は、先に実装されている処理が実行されます。
- in A..Bで、レンジでの判定ができる
- レンジが重なっている場合は、先の処理が実行される
引数のないwhen式の実装方法
最後に、引数のないwhen式の実装方法を紹介致します。
引数なしのwhen式は、次のように実装します。
- Kotlin
when {
条件式A -> 処理
条件式B -> 処理
条件式C -> 処理
else -> 処理
}
これまで「候補」として紹介してきた部分が「条件式」に変わっています。この部分は、if式のelse ifに該当します。
では、実装例です。
- when
- if-else if
val i = 2
when {
i == 0 -> println("0です。")
i == 1 -> println("1です。")
i == 2 -> println("2です。")
else -> println("その他です。")
}
// 2です。
val i = 2
if(i == 0) {
println("0です。")
} else if(i == 1) {
println("1です。")
} else if(i == 2) {
println("2です。")
} else {
println("その他です。")
}
// 2です。
- when式で引数がない場合は、条件式で分岐させる
if elseについての詳しい解説は、以下の記事にまとめておりますので、興味がある方は、そちらもご覧ください。
まとめ
- when式は、結果を返すことができる
- カンマ(, )で列挙することで、候補を複数にできる
- in A..Bで、レンジでの判定ができる
- when式で引数がない場合は、条件式で分岐させる
関連記事