breakの概要
ループ制御 Goの予約語 | ||
break 概要 breakは、ループやswitch文を途中で抜けるために使用します。 |
||
|
breakの基本的な使い方
break文を使用して、特定の条件でループを抜けることができます。
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i == 5 {
break // i が 5 になったらループを終了
}
fmt.Println(i)
}
}
解説:
- このコードでは、
for
ループを使って、i
が1から10まで増加していきます。 - ただし、
if i == 5
の条件が満たされると、break
文が実行され、ループが即座に終了します。 - 結果として、1から4までの数値が出力され、5以降の処理は行われません。
実行結果:
1 2 3 4
switchでのbreakの使用
switch文では、条件を満たした場合にbreakを明示的に記述しなくても、caseごとに自動的にブロックを抜けます。しかし、明示的にbreakを記述することも可能です。
package main
import "fmt"
func main() {
value := 2
switch value {
case 1:
fmt.Println("値は1です")
case 2:
fmt.Println("値は2です")
break
case 3:
fmt.Println("値は3です")
}
}
解説:
switch
文を使って、変数value
の値に応じた処理を行います。case 2:
に該当すると、"値は2です"
が出力されます。- Goでは、caseごとに自動的に
break
が入るため、break
を記述しなくてもcaseブロックは終了します。 - ただし、このコードでは明示的に
break
を記述しています。
実行結果:
値は2です
ラベル付きbreakの使い方
ネストされたループを抜ける場合、通常のbreak文では内側のループしか抜けられません。しかし、ラベルを使用すると、指定した外側のループまで抜けることができます。
package main
import "fmt"
func main() {
OuterLoop:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
if i*j == 4 {
break OuterLoop // 外側のループを抜ける
}
fmt.Println(i, j)
}
}
}
解説:
- このコードでは、外側と内側の2つの
for
ループを使用しています。 i * j == 4
の条件が満たされた場合に、break OuterLoop
が実行されます。- 通常の
break
では内側のループのみ終了しますが、ラベルOuterLoop
を指定することで、外側のループごと終了させることができます。
実行結果:
1 1 1 2 1 3 2 1
注意点
- ラベルを適切に使用する: ラベル付きbreakを使いすぎるとコードが読みにくくなるため注意。
- 無限ループを避ける: 条件を適切に設定し、必要に応じてbreakを活用する。
- switch文では暗黙のbreak: Goのswitch文ではcaseごとに自動でbreakが入るが、明示的に書いてもよい。
よくある質問
- Q: breakは必ず使わないといけませんか?
- A: いいえ。ループやswitchが自然に終了する場合は必要ありませんが、特定の条件で早期終了したい場合に使います。
- Q: Goのswitch文ではなぜbreakが不要なのですか?
- A: Goのswitch文はデフォルトでcaseの後にbreakが挿入されているため、明示的に書く必要がありません。ただし、breakを明示的に書いても動作します。
- Q: ラベル付きbreakのメリットは?
- A: ネストされたループをまとめて抜けられるため、複雑な条件でのループ制御が簡単になります。
- Q: breakを適切に使うには?
- A: 無意味にループを抜けるのではなく、明確な条件を設定して意図的に使うことが大切です。
まとめ
- breakを使うとループやswitchを途中で終了できる。
- forループで特定の条件を満たしたら終了可能。
- switch文ではcaseブロックごとに自動でbreakが入る。
- ラベル付きbreakを使うと、ネストされたループを一気に抜けられる。