#6 Goで学ぶループの基本
Goのループには、他の言語のように複数の種類が存在せず、forだけですべての繰り返しを表現するという、シンプルな設計思想があります。この記事では、Goにおけるループの基本を解説します。
forだけですべて表現する
Goにはwhileという単語が存在せず、条件による繰り返しもforで書きます。
count := 0
for count < 5 {
fmt.Println(count)
count++
}
C言語風の書き方も可能
もちろん、初期値・条件・更新をまとめて書く、なじみのある書き方もできます。
for i := 0; i < 5; i++ {
fmt.Println(i)
}
無限ループとbreak
条件を何も書かなければ、無限に繰り返すforになります。抜け出すにはbreakを使います。
count := 0
for {
fmt.Println(count)
count++
if count >= 5 {
break
}
}
特定の条件のときだけ処理をスキップしたい場合はcontinueが使えます。
rangeを使った繰り返し
配列やスライス(可変長のリストのようなもの)の中身を順番に処理したい場合は、rangeという書き方を使います。
fruits := []string{"りんご", "みかん", "ぶどう"}
for i, fruit := range fruits {
fmt.Println(i, fruit)
}
rangeは、位置(添字)と値の両方を同時に取り出せるのが特徴です。添字が不要な場合は、アンダースコア_を使って無視できます。
for _, fruit := range fruits {
fmt.Println(fruit)
}
ネストしたループから抜ける
二重ループの内側から、外側のループごと一気に抜けたい場合は、ループにラベルを付ける書き方が使えます。
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer
}
fmt.Println(i, j)
}
}
ラベル無しのbreakは、それを直接囲んでいる内側のループしか抜けられないため、多重ループの外側までまとめて抜けたい場面ではラベルが役立ちます。
Goならではの注意点
他の言語の経験がある人は、「whileはどこにあるのか」と探してしまいがちですが、Goでは条件だけを書いたforがその役割を兼ねています。「繰り返しはすべてfor」という考え方を最初に理解しておくと、混乱を避けられます。また、rangeで不要な変数を_で無視する書き方は、Goのさまざまな場面で登場する重要なイディオムなので、早めに慣れておきましょう。
まとめ
Goのループはforひとつに統一されています。書き方のバリエーション(条件のみ・3要素・無限ループ・range)を状況に応じて使い分け、多重ループから一気に抜けたいときはラベル付きbreakも活用しましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Goをもっと学びたい方には「Go言語入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿