for
forループは、中括弧で囲まれた文のブロックを繰り返すために使用されます。
forループは反復操作を実行するのに便利で、多くの場合、
データまたは複数のピンの集合で動作する配列と組み合わせて使用されます。
forループは、2つの部分で構成されています。
まず、forループを設定するヘッダーと、中括弧で囲まれたコード行で構成される本文です。
構文
forループヘッダーには、初期化式、ループ条件式、ポストループ式の3つの部分があります。
一般的な構文は次のようになります。
code:for_sample1.ino
for (初期化; 条件; ループ後処理) {
// 中括弧内のこれらの行はすべて
// ループ本体の一部です。
ステートメント1;
ステートメント2;
...
}
※ループ後処理の後にセミコロン;がないことに注意してください
初期化は、ループが始まる前に最初に行われます。 ループを通過するたびに、条件が評価されます。
条件はブール式です。真の場合、中括弧内のステートメントのリストが実行されます。
次にループ後処理が実行されます。 その後、再び条件が評価され、真であればループ本体に入り、ループが再び開始されます。 これは条件が偽になるまで続きます。
利用例
code:for_sample2.ino
// Dim an LED using a PWM pin
int pwmPin = 9; // LED in series with 470 ohm resistor on pin 9
void setup() {
pinMode(pwmPin, PWM);
}
void loop() {
for (int i=0; i <= 65535; i++) {
pwmWrite(pwmPin, i);
delay(1);
}
}
上の例のloop()関数にforループがあります。
このループは、値が0から始まるiという名前のint変数を宣言することから始まります。
このループは、iが65535以下であるかどうかを調べることによって処理されます。iは0であるため、これは真であるため、pwmWrite()およびdelay()の呼び出しが次に発生します。 その後に式i++が評価され、iがインクリメントされ、iが1になります。 ここで1回分のループが終了します。
このループを反復(イテレーション)と呼びます。
その後、ループは最初の位置に戻り、2番目の反復の開始点として条件がチェックされます(初期化はスキップされます。これは、最初の反復の前に1回だけ発生するためです)。
1つが65535未満であるため、ループ文が再度実行されます。 これは、最後に65536に達したときに繰り返されるまで繰り返されます。その時点で、条件はもはや真ではないため、ループは実行を停止し、loop()関数が戻ります。 もう1つの例として、forループを使用してLEDを明るくしたり消したりします(詳細は、pwmWrite()リファレンスを参照してください)。 code:for_sample3.ino
int pwmPin = 9; // hook up the LED to pin 9
void loop() {
int x = 1;
for (int i = 0; i >= 0; i += x) {
analogWrite(pwmPin, i); // controls the brightness of the LED
if (i == 65535) {
x = -1; // switch direction, so i starts decreasing
}
delay(1);
}
}
コーディングのヒント
C言語の forループは、BASICを含むいくつかの他のコンピュータ言語で見られるforループよりも柔軟です。
セミコロンは必要ですが、3つのヘッダー要素のいずれかまたはすべてを空白のままにしてもかまいません。
また、初期化、条件、およびループ後処理には、有効なC言語のステートメントが使用でき、浮動小数点数を含むC言語のデータ型を使用できます。 これらのタイプの特殊なループは、あまり一般的でないプログラミング問題への解決策を提供することがあります。
たとえば、ループ後処理で乗算を使用すると、幾何学的な進行が生成されます。
code:for_sample4.ino
for(int x = 1; x <= 100; x = x * 2) {
SerialUSB.println(x);
}
このループは数字1,2,4,8、...、64を表示します。
forループの理解を確認するには、次の2つの質問に答えます。
1. ループが終了するまでに何回繰り返しますか?
2. なぜ64で止まるのですか?
答え
1. 7回
2. 7回目の反復の後、ポストループはxを128に等しくします。これは100より大きいため、ループ条件はfalseであり、ループは停止します。
関連項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。