【初心者向け】SwiftとKotlinのswitch文(when式)の書き方

swift_kotlin_switch

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式)の書き方

  1. Swiftのswitch文
  2. Kotlinのwhen式

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式について以下のように解説していきます。

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式も、使いこなせばとても便利なので、ぜひ実践でも使って見て下さい。

以上です。

いつもご静聴ありがとうございます!

エンジニアの皆さん、お疲れ様です。