Swiftのswitch文とKotlinのwhen式の基本をまとめてます。
Swiftはswitch『文』なのに対し、Kotlinのwhenが『式』である所は違いでありポイント。
初心者にも分かりやすく、この記事でも解説していきます。
✔ もくじ
SwiftとKotlinのswitch文(when式)の書き方
Swiftのswitch文、Kotlinのwhen式は、複数に分岐する場合に用いると非常に便利。
条件ごとに、多方向に分岐して処理する事ができます。
例えば以下。
男の誘い方がワンパターンな為、女性の断り文句も、全て流れ作業の如く処理されているのと同じです。
✔ 男の誘い文句大全
- 電話番号教えて?
- 飲みに行かない?
- 今日空いてる?
これに対し。
✔ 女性は日頃からswitch文で回避している
switch 男の誘い文句大全 {
case “電話番号教えて?”: return “ごめんなさい。ポケベルしかもってないの。”
case 飲みに行かない?”: return “私を誘うと、ペンタゴンを敵に回す事になるわよ?”
case 今日空いてる?: return “お財布は空いてないみたい…振り込みでお願いできる?”
}
Kotlinのwhen式も考え方は同じ。『式』なので変数代入が可能な所がswiftと異なる所。
以下よりそれぞれ解説していきます。
✔ SwiftとKotlinのswitch文(when式)の書き方
Swiftのswitch文
Swiftのswitch文について以下のように解説していきます。
✔ Swiftのswitch文
特にSwiftのswitch文は『enum』と呼ばれる列挙型と一緒に使うと超便利。
SwiftのSwitch文をenumと一緒に使う方法も解説します。
Swiftのswitch文の書き方
Swiftのswitch文は、『case』の上から順に値を確認していき、条件にあったcaseの処理を行います。
switch文において、それぞれのcaseに『break』を書かないと、次のcaseの処理をする言語もあります。
ですが、Swiftのswitch文は『break』を書かなくても次のcaseの処理を行いません。
let value = 10
switch value {
case 0:
print("値は0です")
case 1...10:
print("値は1〜10です")
default:
print("その他の値はdefaultで処理します")
}
<!実行結果>
値は1〜10です
Swiftのswitch文のfallthrough
Swiftのswitch文はbreakを書く必要がないと書きましたが、次の処理も行いたい場合はこちら。
意図的に次の処理も行いたい場合は『fallthrough』を使います。
let value = 10
switch value {
case 0:
print("値は0です。")
case 1...10:
print("値は1〜10です。")
fallthrough
default:
print("その他の値はdefaultで処理します。")
}
<!実行結果>
値は1〜10です。その他の値はdefaultで処理します。
上記の例では『case 1…10』である場合は『fallthrough』されるので、その直下の『default』の処理も行われます。
Swiftのswitch文とenumと合わせて使う
Swiftのswitch文はenumと合わせると便利でSwiftらしく書けます。
また、enumの値を全て網羅した場合『default』の記述も不要。
enum Animal {
case Dog
case Cat
case Bird
}
let animal = Animal.Dog
switch animal {
case .Dog:
print("犬です")
case .Cat:
print("猫です")
case .Bird
print("鳥です")
}
<!実行結果>
犬です
Swiftらしく実務でもよく使うswitchの書き方ですので覚えておいて損はないです。
複数の条件をまとめて処理
Swiftのswitch文は、caseをまとめる事もできます。
enum Animal {
case Dog
case Cat
case Bird
}
let animal = Animal.Dog
switch animal {
case .Dog, .Cat:
print("足が4本です")
case .Bird:
print("鳥です")
}
<!実行結果>
足が4本です
where句でさらに条件分岐
Swiftのswitch文はさらにこんな事までできます。
『where』句を用いる事で、さらに詳細に条件分岐が可能。
let pet = ("ポチ", "柴犬")
switch pet {
case (let name, let kind) where name == "エリザベス" && kind == "チワワ":
print("となりの犬です")
case (let name, let kind) where name == "ポチ" && kind == "柴犬":
print("うちの犬です")
case (let name, let kind) where name == "タマ" && kind == "三毛":
print("たぶん猫です")
default:
print("ペットです")
}
<!実行結果>
うちの犬です
上記の例ではタプル(値を複数もった変数)でのswitch文を例に用いました。
Swiftのswitch文はwhere句でさらに細かく分岐する事ができ、変幻自在です。
Kotlinのwhen式
Kotlinのwhen式について以下のように解説していきます。
✔ Kotlinのwhen式
Swiftのswitch文同様『enum』と一緒に使うと超便利です。
SwiftのSwitch文と異なる所もありますが、それぞれ解説します。
Kotlinのwhen式の書き方
Kotlinのwhen式が『文』ではなく『式』である理由は、そのまま変数などに代入できるため。
上から順に値を確認していき、条件にあったinの処理を行います。
また、Swiftのswitch文と同様に『break』する必要がありません。
val value = 1
when(value) {
0 -> print("値は0です")
1 -> print("値は1です")
else -> print("1以上の値です")
}
<!実行結果>
値は1です
式なので、when式をそのまま変数に代入できます。
Swiftのswitch文と異なる所ですね。
val value = 100
val result = when(value) {
0 -> print("値は0です")
1 -> print("値は1です")
else -> print("1以上の値です")
}
print(result)
<!実行結果>
1以上の値です
上記の例では、変数『result』にwhen式を丸ごと代入し、変数『result』を出力しています。
Kotlinのwhen式のin
Kotlinのwhen式で一定の範囲を判定する場合は『in』を使います。
val value = 10
when(value) {
in 0 -> print("値は0です")
in 1..10 -> print("値は1〜10です")
else -> print("11以上の値です")
}
<!実行結果>
値は1〜10です
Swiftのswitch文で一定の範囲を指定する場合は、そのまま『case』書けばよかったので、こちらもSwiftのswitch文と異なる点と言えます。
Kotlinのwhen式とenumと合わせて使う
Kotlinのwhen式はenumと合わせると便利でKotlinらしく書けます。
また、enumの値を全て網羅した場合『else ->』の記述も不要。
なお、範囲の指定でない場合は『in』の記述も不要です。
enum class Animal {
Dog, Cat, Bird
}
val animal = Animal.Dog
when(animal) {
Animal.Dog -> print("犬です")
Animal.Cat -> print("猫です")
Animal.Bird -> print("鳥です")
}
<!実行結果>
犬です
複数の条件をまとめて処理
Swiftのswitch文と同様、Kotlinのwhen式も条件をまとめる事ができます。
enum class Animal {
Dog, Cat, Bird
}
val animal = Animal.Dog
when(animal) {
Animal.Dog, Animal.Cat -> print("足が4本です")
Animal.Bird -> print("鳥です")
}
<!実行結果>
足が4本です
引数なしでも使える
Kotlinのwhen式は、引数がなくても使う事ができます。
when式の引数とは『when( )』の『( )』に与える値の事。
when式の外に定義した変数を、when式の中で分岐していくイメージ。
この書き方もSwiftのswitch文にはできない書き方ですね。
val number = 2
when {
number == 0 -> print("値は0です")
number == 1 -> print("値は1です")
number == 2 -> print("値は2です")
else -> print("その他の値です")
}
<!実行結果>
値は2です
Swiftのswitch文とKotlinのwhen式は、似ていますがそれぞれの特徴がある事が分かります。
Swiftのswitch文もKotlinのwhen式も、使いこなせばとても便利なので、ぜひ実践でも使って見て下さい。
以上です。
いつもご静聴ありがとうございます!
エンジニアの皆さん、お疲れ様です。