Go言語のswitchを使った条件分岐の方法についてわかりやすく解説

スポンサーリンク
スポンサーリンク

switchの概要

複数の条件分岐 Goの予約語

switch

概要switchは、複数の条件を簡潔に表現できる条件分岐構文です。Goのswitch文はbreakが自動で適用されるため、明示的に書く必要がありません。

  • 複数の条件をcaseで指定し、条件に一致する処理を実行する。
  • 条件が一致したら、そのcaseブロックだけが実行される(暗黙のbreak)。
  • defaultを使うと、どのcaseにも一致しない場合の処理を定義できる。

基本的なswitchの使い方

switch文を使って整数の値に応じたメッセージを表示する基本的な例です。

package main

import "fmt"

func main() {
    value := 2

    switch value {
    case 1:
        fmt.Println("値は1です")
    case 2:
        fmt.Println("値は2です")
    case 3:
        fmt.Println("値は3です")
    default:
        fmt.Println("値は1, 2, 3のいずれでもありません")
    }
}

解説:

  • switch valueの値を評価し、一致するcaseの処理を実行します。
  • この例では、value2なので、「値は2です」が出力されます。
  • どのcaseにも一致しない場合、defaultブロックの処理が実行されます。

実行結果:

値は2です

caseで複数の値を指定

caseに複数の値を指定することで、同じ処理をまとめられます。

package main

import "fmt"

func main() {
    day := "土曜日"

    switch day {
    case "月曜日", "火曜日", "水曜日", "木曜日", "金曜日":
        fmt.Println("平日です")
    case "土曜日", "日曜日":
        fmt.Println("週末です")
    default:
        fmt.Println("無効な曜日です")
    }
}

解説:

  • case "月曜日", "火曜日", "水曜日", ...のように、カンマ区切りで複数の値を指定できます。
  • day"土曜日"なので、「週末です」が出力されます。

実行結果:

週末です

switchで条件式を使用

switch文では、条件式を使って値を評価することも可能です。

package main

import "fmt"

func main() {
    score := 85

    switch {
    case score >= 90:
        fmt.Println("評価: A")
    case score >= 80:
        fmt.Println("評価: B")
    case score >= 70:
        fmt.Println("評価: C")
    default:
        fmt.Println("評価: D")
    }
}

解説:

  • switchの後に値を指定せず、各caseで条件式を評価できます。
  • この例では、score85なので、「評価: B」が出力されます。

実行結果:

評価: B

fallthroughを使ったcaseの連続実行

Goではswitchcaseブロックに暗黙のbreakがあるため、通常は1つのcaseのみ実行されます。しかし、fallthroughを使うと、次のcaseの処理も続けて実行できます。

package main

import "fmt"

func main() {
    value := 2

    switch value {
    case 1:
        fmt.Println("値は1です")
    case 2:
        fmt.Println("値は2です")
        fallthrough
    case 3:
        fmt.Println("値は3です(fallthroughにより実行)")
    default:
        fmt.Println("値は1, 2, 3のいずれでもありません")
    }
}

解説:

  • fallthroughを指定すると、次のcaseも実行されます。
  • この例では、value2のため、「値は2です」が出力された後、「値は3です」も出力されます。

実行結果:

値は2です
値は3です(fallthroughにより実行)

注意事項

  • Goのswitchは暗黙のbreakを持つ: caseの後にbreakを書かなくても、自動的にブロックを抜ける。
  • fallthroughは次のcaseを強制的に実行する: ただし、条件は評価されず無条件で実行されるため注意が必要。
  • switchの後に値を指定しなくてもOK: その場合、各caseで独自の条件を指定できる。

よくある質問

Q: Goのswitch文ではなぜbreakが不要なのですか?
A: Goのswitch文はデフォルトでbreakが適用されるため、明示的に書かなくても1つのcaseのみが実行されます。
Q: caseで変数を使うことはできますか?
A: はい。ただし、事前に定義されている変数のみ使用可能です。
Q: defaultは必ず書く必要がありますか?
A: いいえ。defaultは省略可能ですが、どのcaseにも該当しない場合の処理を明示的に指定したい場合に使います。
Q: fallthroughの使いどころは?
A: 特定の条件に一致した場合に、追加の処理を実行したいときに使われますが、多用すると可読性が低下するため注意が必要です。

まとめ

  • switchを使うと、複数の条件を簡潔に記述できる。
  • Goのswitchでは、caseごとに暗黙のbreakがある。
  • fallthroughを使うと、次のcaseも実行できるが、条件の評価はされない。
  • switchの後に値を指定しないことで、caseごとに独自の条件を記述できる。