条件分岐には 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