switchの概要
複数の条件分岐 Goの予約語 | ||
switch 概要 |
||
|
基本的な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
の処理を実行します。- この例では、
value
が2
なので、「値は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
で条件式を評価できます。- この例では、
score
が85
なので、「評価: B」が出力されます。
実行結果:
評価: B
fallthroughを使ったcaseの連続実行
Goではswitch
のcase
ブロックに暗黙の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
も実行されます。- この例では、
value
が2
のため、「値は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
ごとに独自の条件を記述できる。