Unity入門 - C#スクリプトの文法④反復処理(while文、do-while文、for文、foreach文)-
while文
while文は下記のように書かれます。
while(条件式){ 繰り返したい処理 //条件式がtrueの間、繰り返される }
・具体例
int a = 0; while(a < 10){ Debug.Log(a); //aの値をコンソールに表示 a++; //aに1足す }
aが10より小さい間は繰り返されるので、コンソールには0, 1, 2, 3, 4, 5, 6, 7, 8, 9 と10回表示されます。
do-while文
while文と似た形の文になります。
do{ 繰り返したい処理 //まず処理をする. その後, 繰り返すか判定する } while(条件式)
do-while文とwhile文の違いは、まず処理をすることです。次の処理をするか否かは、その後に判定します。条件式がtrueであれば、反復し、処理を繰り返します。そのため、while文とは違い、確実に一回は処理を行います。
・具体例
int a = 1; int i = 0; do{ a *= 2; i++; } while(a < 1000) Debug.Log("aは2を" + i + "回掛けると1000以上になる);
for文
反復処理をする場合、条件式の初期化等が必要になる場合が多いです。for文ではこの作業を文中に書くことができるため、スマートに書けることがあります。
for(初期化式; 条件式; 更新式){ 反復したい処理 //処理後、更新式を行い、条件式がtrueの間、反復する }
分かりにくいため、具体例を用いて説明いたします。
for(int a = 1; a <= 10; a++){ Debug.Log(a + "回目"); //aが10を超えるまで反復 }
forの右にある括弧内に初期化式、条件式、更新式を書いています。今回は
- 初期化式:int a = 1
- 条件式:a <= 10
- 更新式:a++
となっています。初めは a = 1であり、処理が終わるたびに更新式が実行されるため、aに1が足される。aが10以下の間は条件式がtrueのため反復、10より大きくなればfalseになり反復から抜けます。
foreach文
配列のすべての要素に対して読み書きをする場合に頻繁に使用されます。
foreach(変数宣言 in 配列名){ 繰り返したい処理 //配列中の各要素に対して1回ずつ処理が行われる }
・具体例
int[] num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} foreach(int a in num){ //numの中の数字をaとして宣言 a *= 10; //aを10倍 Debug.Log(a); //10倍したaの値をコンソールに表示 }
このように使われます。上記ではコンソールに、0, 10, 20, 30, 40, 50, 60, 70, 80, 90 と表示されます。
反復処理内で使われるキーワード
continue
continueを使うことで、現在の繰り返し処理を中断し、次のループにジャンプすることができます。
for(int i = 0; i < 10; i++){ if((i % 2) == 1){ continue; //iを2で割った余りが1の場合、次のループへ } Debug.Log(i); //コンソールにiの数値を表示 }
iを2で割った余りが1の場合、すなわち奇数の場合は処理をスキップし、次のループに入ります。そのため、コンソールには、0、2、4、6、8が表示され、奇数は表示されません。
break
breakは条件分岐のswitch文内でもでてきたものになります。反復処理を途中で中断したい場合に使います。
int a = 0; int b = 5; while(a < 10){ a++: if(a == b){ break; //a = b になったら中断 } }
上ではwhile文内にbreakを書いていますが。他の反復処理のなかでも使えます。
反復処理をする場合の注意点
反復処理は条件式がfalseになるか、breakで中断しない限り、永遠に反復し続けます。そのため、ちゃんと反復処理を抜けるように記述しなければ、無限ループを起こし、フリーズします。確実にfalseになるようにするか、breakで中断するかしましょう。
最後に
反復処理について、while文、do-while文、for文、foreach文をご紹介しました。次回の記事では、反復処理でフリーズした場合の対処法を書こうと思います。