INDEX
fallthroughの概要
| switchの連続実行制御 Goの予約語 | ||
|
fallthrough 概要 |
||
|
基本的なfallthroughの使い方
fallthroughを使うと、次のcaseブロックが続けて実行されます。
package main
import "fmt"
func main() {
num := 2
switch num {
case 1:
fmt.Println("値は1です")
case 2:
fmt.Println("値は2です")
fallthrough
case 3:
fmt.Println("値は3です(fallthroughにより実行)")
default:
fmt.Println("値は1, 2, 3のいずれでもありません")
}
}
解説:
case 2:が一致し、「値は2です」が出力される。fallthroughがあるため、条件を評価せずに次のcase(case 3:)も実行される。
実行結果:
値は2です 値は3です(fallthroughにより実行)
fallthroughを使ったランク評価の例
例えば、スコアに応じたランク評価をする際にfallthroughを使うと、特定のスコア以上の評価をすべて表示できます。
package main
import "fmt"
func main() {
score := 85
switch {
case score >= 90:
fmt.Println("Sランク")
fallthrough
case score >= 80:
fmt.Println("Aランク")
fallthrough
case score >= 70:
fmt.Println("Bランク")
fallthrough
default:
fmt.Println("ランクなし")
}
}
解説:
scoreが85のため、case score >= 80が該当し、「Aランク」が出力される。fallthroughがあるため、条件を無視して「Bランク」も出力される。- さらに
fallthroughにより、「ランクなし」も実行される。
実行結果:
Aランク Bランク ランクなし
fallthroughの注意点
Goのfallthroughは無条件で次のcaseを実行するため、適切に使用しないと予期しない動作を引き起こす可能性があります。
package main
import "fmt"
func main() {
value := 10
switch value {
case 10:
fmt.Println("値は10です")
fallthrough
case 20:
fmt.Println("値は20です(fallthroughにより実行)")
default:
fmt.Println("その他の値")
}
}
解説:
- 変数
valueは10なので、case 10:が実行される。 fallthroughにより、次のcase 20:も実行されるが、valueが20かどうかはチェックされない。
実行結果:
値は10です 値は20です(fallthroughにより実行)
fallthroughを使わずに複数のcaseを処理する方法
Goではfallthroughを使わなくても、複数のcaseをグループ化できます。
package main
import "fmt"
func main() {
day := "土曜日"
switch day {
case "月曜日", "火曜日", "水曜日", "木曜日", "金曜日":
fmt.Println("平日です")
case "土曜日", "日曜日":
fmt.Println("週末です")
default:
fmt.Println("無効な曜日です")
}
}
解説:
case "月曜日", "火曜日", ...のように、カンマ区切りで複数の条件を指定できる。- この方法なら、条件を満たすものだけが実行され、無駄な処理が発生しない。
実行結果:
週末です
注意事項
- fallthroughは条件を無視する: 次の
caseの条件が満たされていなくても実行されるため、意図しない動作につながることがある。 - 最後のcaseでfallthroughを使うとエラー:
fallthroughは次のcaseが存在しないとエラーになる。 - Goのswitchはbreakがデフォルト: 他の言語とは異なり、Goでは
caseごとに暗黙のbreakがあるため、通常はfallthroughを使わなくても問題ない。
よくある質問
- Q: Goのswitchではなぜfallthroughが必要なのですか?
- A: Goの
switchはデフォルトでbreakが適用されるため、明示的に次のcaseを実行したい場合にfallthroughが必要です。 - Q: fallthroughを使わない方が良いですか?
- A: 多くの場合は不要ですが、特定の条件で次の
caseも実行したい場合には便利です。 - Q: fallthroughを使うときの注意点は?
- A: 次の
caseの条件を無視して実行されるため、意図しない動作を引き起こさないように注意が必要です。
まとめ
fallthroughを使うと、次のcaseの条件を無視して強制的に実行できる。- 通常のGoの
switchは各caseに暗黙のbreakがあるため、fallthroughなしでは次に進まない。 - 多用すると可読性が低下するため、必要な場面でのみ使用するのが望ましい。