まくまくHugo/Goノート
for によるループ処理
2017-08-31
Go 言語では、for キーワード 1 つだけで while ループや無限ループを表現することができます。

C 言語風の for ループ

for 初期化; 条件式; 後処理 {
	// ...
}

Go 言語の for ループは、C 言語に似た構文を使用しますが、for の直後は括弧で囲みません。ただし、実行部分の括弧は必ず記述する必要があります。このあたりのルールは、if 文と同じですね。

記述例

for i := 0; i < 3; i++ {
	fmt.Println(i)
}

実行結果

0
1
2

ちなみに、i++ という部分を、++i という前置インクリメントに置き換えることはできません。Go 言語では、i++ という後置インクリメントは文として扱われるため、式の中に埋め込むことができないようになっています。そのため、前置インクリメントと後置インクリメントを区別する必要がそもそもなく、文法として後置インクリメントの形に統一するようになっています。

while ループ(としての for ループ)

Go 言語には while ループは存在しませんが、for ループで代用できます。

i := 0
for i < 3 {
	fmt.Println(i)
	i++
}

for ループの初期化ステートメントや条件式、後処理ステートメントはそれぞれ省略することができるので、上記の for ループは、実は下記のような記述の省略形とみなすことができます(上記のように省略して記述すべきです)。

for ; i < 3; {
	// ...
}

無限ループ

Go 言語では、無限ループも for を使用して記述するよう統一されています。

i := 0
for {
	i += 1
	if i > 5 {
		break
	}
	if i % 2 == 0 {
		continue
	}
	fmt.Println(i)
}

実行結果

1
3
5

C 言語の無限ループの記載方法 (for (;;) { }) に慣れているのであれば、上記は下記のような記述の省略形だと考えれば良いでしょう(このように書くべきではありませんが)。

for ;; {
	// ...
}

ループの継続と終了に、continuebreak キーワードを使用するのも C 言語と同様です。

2017-08-31