条件分岐には if
文のほかにもうひとつ、switch
文がある。switch
文は次の通り。
switch 条件式 { case 式A: 処理A1 処理A2 処理A3 case 式B: 処理B1 処理B2 処理B3 case 式C: 処理C1 処理C2 処理C3 default: 処理Z1 処理Z2 処理Z3 }
条件式の値と case
節の式A、B、C の値が順に比較され、等しくなる最初の case
節の処理が実行される。どの case
節の式とも等しくなければ default
節が実行される。
試してみよう。お題は FizzBuzz 問題だ。
package main import "fmt" func main() { i := 1 for i <= 20 { switch i % 15 { case 0: fmt.Println("FizzBuzz") i++ case 3, 6, 9, 12: fmt.Println("Fizz") i++ case 5, 10: fmt.Println("Buzz") i++ default: fmt.Println(i) i++ } } }
^o^ > go run switch.go 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz
例題のために冗長な書き方にしたけど、期待通り動いている。見ればわかるように、case
節の式はひとつでなくてもいい。
また、条件式を書かない書き方もある。この場合には case
節の式の値が true
になる最初の節が実行される。
package main import "fmt" func main() { i := 1 for i <= 20 { switch { case i % 15 == 0: fmt.Println("FizzBuzz") case i % 3 == 0: fmt.Println("Fizz") case i % 5 == 0: fmt.Println("Buzz") default: fmt.Println(i) } i++ } }
^o^ > go run switch2.go 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz