1 ループ文の概要
Go言語では、ループ文を使用してコードブロックを複数回実行することができます。特定の操作を繰り返し実行する必要がある場合、ループ文は非常に役立ちます。たとえば、配列内の要素を反復処理したり、特定の条件が満たされるまで操作を繰り返したりすることがあります。Go言語では、ループ文は主にfor
キーワードを使用して実装されます。これはGo言語で唯一のループ文です。効率的でメンテナンスしやすいコードを書くためには、ループ文の正しい使用が重要です。
2 for
ループの基礎
2.1 for
ループの構造
Go言語におけるfor
ループは、以下の3つの部分で構成されています。
- 初期化文: 最初の反復の前に実行され、通常はループカウンタの宣言に使用されます。
-
条件式: 各反復の前に評価されます。条件が
true
の場合、ループ本体が実行されます。 - 後処理文: それぞれの反復のコードブロックの後に実行され、通常はループカウンタを更新するために使用されます。
for
ループの構文は以下のようになります:
for 初期化文; 条件式; 後処理文 {
// ループ本体のコード
}
2.2 for
ループの単純な例
単純な例を通じて、for
ループの実行プロセスを理解しましょう。
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println("iの値は:", i)
}
}
この例では、変数i
は0
で初期化されます。for
ループは条件i < 5
がtrue
かどうかを確認します。条件が真の場合、ループ本体が実行され、i
の値が出力されます。ループ本体を実行した後、i
の値はi++
(インクリメント操作)で更新され、そしてi
の値が5
になるまで条件を確認し続け、それを満たすと条件がfalse
となりfor
ループが終了します。
2.3 その他のfor
ループの例
Go言語のfor
ループは非常に柔軟であり、さまざまな形式で記述することができます。
2.3.1 無限ループ
Go言語では、for
ループの初期化文、条件式、後処理文を省略して、break
文または関数からの戻り値によって終了するまで実行される無限ループを作成することができます。
for {
// 無限ループ内のコード
if someCondition {
break // 特定の条件が満たされた際にループを終了
}
}
2.3.2 条件のみのループ
Go言語では、条件のみを含むfor
ループを使用することもできます。これは他のプログラミング言語のwhile
ループに似ています。
n := 0
for n < 5 {
fmt.Println(n)
n++
}
上記のコードは0
から4
までを出力し、n
が5
になるとループが終了します。
2.3.3 配列やスライスを反復処理
Go言語では、range
キーワードを使用して配列やスライスの各要素を反復処理することができます。
items := []int{1, 2, 3, 4, 5}
for index, value := range items {
fmt.Printf("インデックス: %d, 値: %d\n", index, value)
}
上記のコードは各要素のインデックスと値を出力します。要素の値のみを必要とする場合は、インデックスを無視するために_
を使用することができます。
for _, value := range items {
fmt.Printf("値: %d\n", value)
}
注意: 配列の使用方法については後続の章で詳しく説明します。この部分が理解できなくても、
for
ループがこのように使用できることを理解していれば問題ありません。
2.3.4 マップをループする
マップを繰り返し処理する際、for
ループとrange
式の組み合わせは非常に強力です。これにより、マップのそれぞれのキーと値を取得できます。
colors := map[string]string{"red": "#ff000", "green": "#00ff00", "blue": "#000ff"}
for key, value := range colors {
fmt.Printf("Key: %s, Value: %s\n", key, value)
}
この例では、colors
マップ内のすべてのキーとそれに対応する値を出力しています。スライスを繰り返し処理するのと同様に、キーまたは値のみが必要な場合は、他の要素を無視することもできます。
注意:マップの使用方法は後続の章で詳しく説明します。この部分が理解できなくても大丈夫です。
for
ループがこのように使用できることさえ理解できれば問題ありません。
3 ループの制御
3.1 break
を使用してループを終了する
特定の条件が満たされたときにループを途中で終了する必要がある場合、break
文を使用できます。以下は、break
を使用してループを終了する例です:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break // iが5に等しいときにループを終了
}
fmt.Println("iの値は:", i)
}
// 出力には0から4の値のみ含まれます
}
3.2 continue
を使用してイテレーションをスキップする
特定の状況では、現在のイテレーションをスキップして次のイテレーションに移る必要があります。これはcontinue
文を使用することで実現できます。以下はその例です:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i%2 != 0 {
continue // iが奇数の場合にこのイテレーションをスキップ
}
fmt.Println("偶数:", i)
}
}