Genta Hirauchi

公開日:2020/01/28
更新日:2020/03/22

【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です。
Point
  • 複数行の処理を実装する場合は、{}で実装する
  • 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です。
Point
  • カンマ(, )で列挙することで、候補を複数にできる

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がある場合等)は、先に実装されている処理が実行されます。

Point
  • 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です。
Point
  • when式で引数がない場合は、条件式で分岐させる

if elseについての詳しい解説は、以下の記事にまとめておりますので、興味がある方は、そちらもご覧ください。

【Kotlin基礎】if elseで条件分岐を実装する方法

本記事は、Kotlinでのif elseの基本的な使用方法はもちろん、戻り値を返したり、三項演算子的な使い方なども、サンプルコードを交えてわかりやすく解説しております。また、Javaで実装した場合のコードも記載しておりますので、Java経験者の方は、よりわかりやすい記事になっているかと思います。

まとめ

  • when式は、結果を返すことができる
  • カンマ(, )で列挙することで、候補を複数にできる
  • in A..Bで、レンジでの判定ができる
  • when式で引数がない場合は、条件式で分岐させる