Go言語のif文、else, else ifブロックを使った条件分岐を見てきました。
ここでは、switchを使った分岐について見ていこうと思います。
switch文の基本
Go言語には、switch文という分岐の方法があります。
switchは、他の複数の値と比較する時に利用し、if文のelse ifブロックを複数用いる方法と似ています。
switch文は次のような形で利用します。
switch 条件 {
case A:
処理A
case B:
処理B
case C:
処理C
default:
デフォルト処理
}
条件がそれぞれのcaseに対応する場合に、その処理が実行されるという形です。caseに当てはまらない時にdefaultの処理が実行されます。
具体的なコードを見てみましょう。
package main
import "fmt"
func main() {
n := "Golang"
switch n {
case "Python", "JavaScript", "Golang":
fmt.Println("ただいま勉強中。")
case "Java":
fmt.Println("本だけ読みました。")
case "Swift":
fmt.Println("iPhoneアプリでも作りましょう。")
default:
fmt.Println("プログラミングには興味ありません。")
}
}
条件の部分を変数として与えています。
caseに関しては、このコードの最初の部分のように、複数の条件を与えても構いません。
実行結果はこうなります。
ただいま勉強中。
caseの中の複数の条件のひとつに当てはまっているものが実行されているのがわかります。
if- elseのようにswitchのcaseを利用
上のケースでは、最初に条件を与えて、それにcaseが当てはまるものを実行していますが、それぞれのcaseをif – elseのように使うことができます。
switch {
case A:
処理A
case B:
処理B
case C:
処理C
default:
デフォルト処理
}
caseが成立している場合に処理を実行するというものです。
caseが成立しない場合にdefaultの処理をしますが、defaultを削除したコードも書くことができます。
微妙に意味合いが違いますけど、処理自体は変わらないのはわかりますね。
コードで見て行きましょう。
package main
import (
"fmt"
)
func main() {
switch {
case false:
fmt.Println("falseなので出力されません。")
case (10 == 100):
fmt.Println("条件が成立しないので出力されません。")
case (10 == 10):
fmt.Println("trueになるので出力します!")
case (4 == 4):
fmt.Println("trueになるのですが...")
}
}
caseの中でtrue/falseの判定をして出力しています。変数を別に取って、caseにあてはめてもいいです。
実行するとこうなります。
trueになるので出力します!
ここで、ちょっと注意が必要です。
このコード、最後のcaseも条件は成立しています。ですが、出力をしていません。
このように、caseは上から評価されて成立したところで評価は終了するということに注意しましょう。
fallthroughキーワード
Go言語のswitchの独自の機能としてfallthroughというものがあります。
このキーワードを使うことで、その次のcaseの処理を実行することができます。
実際のコードで見て行きましょう。
package main
import (
"fmt"
)
func main() {
switch {
case false:
fmt.Println("falseなので出力されません。")
case (10 == 100):
fmt.Println("条件が成立しないので出力されません。")
case (10 == 10):
fmt.Println("trueになるので出力します!")
fallthrough
case (4 == 4):
fmt.Println("trueになるのですが...")
fallthrough
case (0 == 4):
fmt.Println("falseになるのですが...")
}
}
上のコードをfallthroughをつけて修正しています。
さらに、fallthroughに続けて、caseがfalseになる場合を追加しています。
実行結果はこうなります。
trueになるので出力します!
trueになるのですが...
falseになるのですが...
このように、fallthroughを加えると、次のcaseが実行されることになります。このcaseの評価がtureであろうとfalseであろうと処理を実行することができるというのが特徴です。
最後に
ここでは、Go言語のswitch文について扱いました。
switchキーワードを使うと、caseでの条件分岐をif文のelse ifブロックのように複数利用することができます。
fallthroughキーワードを利用することで、このキーワードの次のcaseの処理をtrue/falseに関係なく実行することができます。これはGo言語特有のキーワードです。
Pythonにはswitchの機能は無いのでPythonコードでの処理はここでは省略します。