反復処理
同じような処理を繰り返して実行するようなときには繰り返し文を使用します
繰り返し文を使用することで、プログラムの行数を削減し、プログラムを記述する手間を削減することができます。
また、簡潔なプログラムを書くことにもつながります
for文
任意の処理を任意の回数繰り返して実行することができる文です
繰り返しの条件は文頭で宣言する変数によって行います
この変数をfor文の中で使用することもできます
break
文が処理中にあった場合、ループを強制的に抜け出しますcontinue
文が処理中にあった場合には、 continue
文以降の処理を一度スキップしてループを続けます
for (変数の初期化; ループ継続条件; 変数の増加もしくは減少処理) {
// 繰り返す処理
}
// iが0から9まで10回繰り返す
for (int i = 0; i <= 9; i++) {
// 10回繰り返される処理
}
while文
任意の処理を条件が真になるまで繰り返して実行する文です
条件は if文 と同じように指定します
break
文が処理中にあった場合、ループを強制的に抜け出しますcontinue
文が処理中にあった場合には、 continue
文以降の処理を一度スキップしてループを続けます
// 22番ピンのスイッチの値がHIGHの間何かしらの処理を行う
const int SWITCH_PIN = 22;
while (digitalRead(SWITCH_PIN) == HIGH) {
// 何かしらの処理
}
for-each文
for-each文は for文 を拡張した構文です
配列の要素をひとつづつ取り出して、その値を処理したいときに使用します
for(配列の値の型 内部変数名: 配列名) {
// 処理
}
通常の for文 でそのような処理を記述する場合、以下の例のように、配列の長さを事前に知っている必要があります
int length = 5;
int array[length] = {0, 1, 2, 3, 4};
for(int i = 0; i < length; i++) {
// iがlengthを超えた場合バグが発生する
tone(4, array[i] * 100);
delay(1000);
noTone(4);
}
上の例を for-each文を利用して記述した例を下に示します
int length = 5;
// lengthはここしか使用しない
int array[length] = {0, 1, 2, 3, 4};
for(int i: array) {
tone(4, array[i] * 100);
delay(1000);
noTone(4);
}
この構文は主にピンの初期化などに有効です
int OUTPUT_PINS = {4, 5, 6, 12, 13, 14, 15};
for(int i: OUTPUT_PINS) {
pinMode(i, OUTPUT);
}