【Kotlin】when式で条件分岐させる方法!複数の条件を指定方法

この記事からわかること

  • Kotlin/Android Studiowhen使い方
  • switchとの違い
  • 範囲指定未満以上など
  • 列挙型を指定する

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献:公式リファレンス:WebView でのウェブアプリの作成

環境

when式の使い方

Kotlinのwhen式はJavaのswitch文と同じような役割を持つ制御フローです。使い方はwhenの後の()内に条件対象の値を渡し{}の中に条件値とマッチした時の処理->で繋いで記述します。

when (条件) {
  値1 -> 処理1
  値2 -> 処理2
  ...
  else -> デフォルトの処理
}

whenはいずれかの分岐条件に一致し処理が行われるまで上から順番に照合を始め、条件にマッチした値があればその処理を実行して照合を終了します。そのためbreakを明示的に記述しなくても良いようになっています。

使用例

val value = 1
when (value) {
  0 -> print("0")
  1 -> print("1")
  2 -> print("2")
  3 -> print("3")
  else -> print("other")
}

複数の条件を指定する

複数の条件を指定する際はカンマ区切りで条件を羅列します。

val value = 1
when (value) {
  0 -> print("0")
  1,3,5 -> print("1,3,5")
  2,4,6 -> print("2,4,6")
  else -> print("other")
}

複数の条件にマッチする場合のみ分岐する

複数の条件をマッチした場合を指定する際は&&を使用して指定します。

val value = 1
val value2 = 2
when {
  value == 1 && value2 == 2 -> print("1.2")
  else -> print("other")
}

when (値)ではなくwhenのみにすることでwhen内でも変数の値を参照できるようになります。

範囲で分岐する

決め内ではなく、範囲で分岐させるにはin X..Xで指定します。

val value = 1
when (value) {
  0 -> print("0")
  in 1..10 -> print("1~10")
  in 11..20 -> print("11~20")
  else -> print("other")
}

比較演算子を使って分岐する

「〇〇以上」「〇〇未満」などは比較演算子()を使って指定します。

val value = 20
when {
    value > 10 -> print("10以上")
    value < 10 -> println("10未満")
    else -> print("other")
}

列挙型で分岐させる

列挙型を指定することも可能になっており、その際は条件分岐に全てのケースが網羅されていないと'when' expression must be exhaustive, add necessary 'Kotlin' branch or 'else' branch insteadといったエラーになってしまいます。

enum class Language {
    HTML, PHP, Swift , Kotlin
}

val language = Language.Swift
val message = when (language) {
    Language.HTML -> "Webページ開発"
    Language.PHP -> "サーバーサイド開発"
    Language.Swift -> "iOSアプリ開発"
    Language.Kotlin -> "Androidアプリ開発"
}

print(message)

またwhen式は上記のように結果を変数に格納することも可能です。

関数などを条件値に渡す

条件値には関数などを指定することもできます。

例1

val x = 2
when (x) {
    x.toInt() -> print("Int型")
    else -> print("Int型でない")
}

例2

fun validation() :Boolean {
    return true
}
when {
    validation() -> print("true")
    else -> print("false")
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index