「Go/条件分岐と繰り返し」の版間の差分
削除された内容 追加された内容
→繰り返し - for文: cleanup タグ: 2017年版ソースエディター |
→イテレート - for文: 素朴なFor文を説明用にIf文とGoto文の組み合わせで表現 タグ: 2017年版ソースエディター |
||
73 行
=== イテレート - for文 ===
Goでは、For文がイテレート(繰返し;反復)する唯一の構文です(Goには、doやwhileはありません)。
For文には素朴なFor文と他の言語で言うForeach文の2種類
{{See also|Go/文#For文}}
;素朴な[[W:For文|For文]]: <syntaxhighlight lang="go">for i := 0; i < n; i++ {▼
▲: <syntaxhighlight lang="go">for i := 0; i < n; i++ {
}
</syntaxhighlight>
: C言語のFor文に相当する機能です
;[[W:Foreach文|Foreach文]]的なFor文: <syntaxhighlight lang="go">▼
と書く方法と、C++の範囲For文やPythonのenumerate関数を伴ったFor文のように▼
▲: <syntaxhighlight lang="go">
for i, e := range collection {
/
}
</syntaxhighlight>
==== 素朴なFor文 ====
▲という、スライスや配列、mapなどのコレクションから一つずつ要素を取り出していく方法があります。
: <syntaxhighlight lang="go">▼
▲まず、前者の方の使い方を説明します。
▲<syntaxhighlight lang="go">
for 初期化; 条件式; ポスト文 {
}
</syntaxhighlight>
これをIf文とGoto文を使って書き直すと。
''初期化''および''ポスト文''は単純な文(簡単な変数宣言、インクリメント文、代入、関数呼び出し)でなくてはならない。また、条件式は論理式 (trueかfalseを返す式)でなくてはならない。For文は次のように実行される。▼
: <syntaxhighlight lang="go">
# 初期化▼
{
▲# 繰返す処理
# ポスト文▼
top:
if !(条件式) {
goto bottom
また、C言語などと同様にGoでも、Break文やReturn文などがforブロック中({ } の内部)にあれば、すべての要素をイテレートする前にFor文から脱出します。▼
}
goto top
bottom:
}
</syntaxhighlight>
: (上記のコードはFor文の働きをうまく書き表せていますが、Break文とContinue文があった場合の挙動はFor文とは異なります)
▲: ''初期化''および''ポスト文''は単純な文(簡単な変数宣言、インクリメント文、代入、関数呼び出し)でなくてはな
: また、条件式は論理式 (trueかfalseを返す式)でなくてはならず、省略されると true が仮定されます。
: while はこの形式の最初と最後の文を省略した
::<syntaxhighlight lang="go">for 条件式 {
/* 繰返す処理 */
}
</syntaxhighlight>と表現します。
;[https://play.golang.org/p/5YquULYfrQ6 コード例]:<syntaxhighlight lang="go">
133 ⟶ 146行目:
==== range 節を伴った For文 ====
Goにも[[W:Foreach文|Foreach文]]的なFor文があり、For文のrange節を伴った
スライス・配列・文字列・マップ・チェンネルなどのコレクションの要素を1つづつ(breakやreturnで中途退出しない限り)すべてイテレートします。 {{See also|Go/文#range_節のある文の場合}}
310 ⟶ 324行目:
</syntaxhighlight>
: For・rangeにチェンネルを適用するとクローズされるまで受信した値をイテレートします。
====For文からの脱出====
▲また、C言語などと同様にGoでも、Break文やReturn文などがforブロック中({ } の内部)にあれば、すべての要素をイテレートする前にFor文から脱出します。
{{See also|Go/文#Break文|Go/文#Continue文|Go/文#Return文}}
|