【Kotlin】whenで多数の条件分岐を行う!使い方を解説!
(*このページは2021年2月16日に更新されました。)
皆さんはKotlinでwhenを使ったことがありますか?
whenを使用すると、たくさんの条件分岐があった場合にif文よりも簡単にわかりやすく書くことができます。
whenとは条件分岐を行う構文であり、if文と比べて条件が多い場合に適応しています。
その為、if文をたくさん書かなくてもこの構文ひとつだけで対応が可能になるということです。
また、JavaやCなどの言語を使用したことがある方は名前が変わったswitch文と認識すると問題はないかと思います。
そして、whenは値に列挙型(Enum)を指定すると安全に条件処理を行うことができ、レンジオブジェクトを指定すると値の範囲を簡単に指定して処理を行うことができるのでとても便利です。
今回はKotlinのwhenで多数の条件分岐を行う方法について以下の内容で解説していきます。
⚫︎ whenとは
⚫︎ 値に数値を指定して条件処理を行う場合
⚫︎ 値に文字列を指定しtて条件処理を行う場合
⚫︎ 値に真偽値を指定して条件処理を行う場合
⚫︎ 値に複数条件を指定して条件処理を行う場合
⚫︎ 値に列挙型(Enum)を指定して条件処理を行う場合
⚫︎ 値にレンジオブジェクトを指定して条件処理を行う場合
目次
whenとは
whenとは、条件分岐を行う場合に使用し、if文と比べて多岐の条件の場合に適応した文法になります。
条件分岐であるため、if文で成り立つのではないかと思いますが、条件式の分岐が10パターンや20パターンある場合にif文で書くととても面倒です。
しかし、whenを使用すると、多いパターンの条件であっても簡単に分かりやすく記述することが可能になります。
whenの書き方
whenの書き方は下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
when (式) { 値1 -> { 処理内容 } 値2 -> { 処理内容 } ... ... ... else -> { 処理内容 } } |
whenの式の値、それを各値と比較します。
式の値が特定の値と一致する場合、一致する値の処理が実行されます。
たとえば、when(式)の値が2である場合、2の値に一致する処理が実行されます。
また、whenの式の値に各値と一致しない場合はelseの処理が実行されます。
whenを使用した基本的なサンプルコード
whenを使用した基本的なサンプルコードを紹介します。
値に数値を指定して条件処理を行う場合
whenの値に数値を指定して条件処理を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
fun main(args: Array<String>) { numCheck(0) numCheck(1) numCheck(2) numCheck(3) } fun numCheck (num: Int) { when (num) { 0 -> { println("値は0です。") } 1 -> { println("値は1です。") } 2 -> { println("値は2です。") } else -> { println("値はそれ以外の数字です。") } } } |
出力結果
値は0です。
値は1です。
値は2です。
値はそれ以外の数字です。
whenの値に数値を指定することで式の値によって条件処理が行われています。
値に文字列を指定して条件処理を行う場合
whenの値に文字列を指定して条件処理を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
fun main(args: Array<String>) { strCheck("東京") strCheck("大阪") strCheck("青森") strCheck("愛媛") strCheck("北海道") } fun strCheck (str: String) { when (str) { "東京" -> { println("関東地方です。") } "大阪" -> { println("関西地方です。") } "青森" -> { println("東方地方です。") } "愛媛" -> { println("四国地方です。") } else -> { println("それ以外の地方です。") } } } |
出力結果
関東地方です。
関西地方です。
東方地方です。
四国地方です。
それ以外の地方です。
whenの値に文字列を指定することで式の値によって条件処理が行われています。
値に真偽値を指定して条件処理を行う場合
whenの値に真偽値を指定して条件処理を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fun main(args: Array<String>) { boolCheck(true) boolCheck(false) } fun boolCheck (bool: Boolean) { when (bool) { true -> { println("値はtrueです。") } false -> { println("値はfalseです。") } } } |
出力結果
値はtrueです。
値はfalseです。
whenの値に真偽値を指定することで式の値によって条件処理が行われています。
値に複数値を指定して条件処理を行う場合
whenの値に複数値を指定して条件処理を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fun main(args: Array<String>) { valCheck(1) valCheck(4) valCheck(7) valCheck(10) } fun valCheck (num: Int) { when (num) { 1, 3, 5, 7, 9 -> { println("値は奇数になります。") } 2, 4, 6, 8, 10 -> { println("値は偶数になります。") } } } |
出力結果
値は奇数になります。
値は偶数になります。
値は奇数になります。
値は偶数になります。
whenの値に複数値を指定することで式の値によって条件処理が行われています。
whenを使用した応用的なサンプルコード
whenを使用した応用的なサンプルコードを紹介します。
値に列挙型(Enum)を指定して条件処理を行う場合
whenの値に列挙型(Enum)を指定して条件処理を行ってみます。
列挙型(Enum)を指定すると、事前に定義した定数のみを扱えることができるので安全に条件処理を行うことができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
enum class Traffic { Red, Yellow, Blue } fun main(args: Array<String>) { val stop = Traffic.Red valCheck(stop) val caution = Traffic.Yellow valCheck(caution) val go = Traffic.Blue valCheck(go) } fun valCheck (lump: Traffic) { when (lump) { Traffic.Red -> { println("赤色なので止まってください。") } Traffic.Yellow -> { println("黄色なので注意してください。") } Traffic.Blue -> { println("青色なので進んでください。") } } } |
出力結果
赤色なので止まってください。
黄色なので注意してください。
青色なので進んでください。
whenの値に列挙型(Enum)を指定することで、条件処理が行われています。
Enumで事前に定義した定数のみを扱うので、決まった値の条件処理のみを実行することができます。
値にレンジオブジェクトを指定して条件処理を行う場合
whenの値にレンジオブジェクトを指定して条件処理を行ってみます。
値にレンジオブジェクトを指定すると数値の範囲を設定できるので、値の範囲を簡単に指定して処理を行うことができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
fun main(args: Array<String>) { // Your code here! numCheck(14) numCheck(999) numCheck(10000) } fun numCheck (num: Int) { // Your code here! when (num) { in 1..10 -> { println("数値は1〜10の間です。") } in 11..100 -> { println("数値は11〜50の間です。") } in 101..1000 -> { println("数値は101〜1000の間です。") } in 1001..10001 -> { println("数値は101〜10001の間です。") } } } |
出力結果
数値は11〜50の間です。
数値は101〜1000の間です。
数値は101〜10001の間です。
whenの値にレンジオブジェクトを指定することで、値の数値の範囲を設定して条件処理が行われています。
その為、比較演算子などを使用することなく簡単に数値の範囲を設定することができます。
今回のポイント
whenで多数の条件分岐を設定する
Kotlinで複数の条件分岐が発生する場合はifではなくwhenを使用する。
⚫︎ whenとは条件分岐を行う場合に使用し、if文と比べて条件が多い場合に適応した文法である
(他の言語でいうswitch文のようなもの)
⚫︎ whenは数値、文字列、真偽値などを条件として分岐の処理を行うことができる
(1つの値に複数の値を設定することも可能である)
⚫︎ when()はmap()と組み合わせて使用すると、文字をUnicodeにまとめて変換することができる
⚫︎ whenの値に列挙型(Enum)を指定すると、安全に条件処理を行うことができる
⚫︎ whenの値にレンジオブジェクトを指定すると、値の範囲を簡単に指定して処理を行うことができる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。