繰り返しに使用される制御構文
繰り返しに使用される構文は4つです。
・for文(繰り返す回数が事前に分かっているとき)
・foreach文(配列やリストの要素を順番に処理していくとき)
・while文(繰り返す回数が分からないので、条件がtrueの間は繰り返す)
・do while(条件の判定がループ処理の最後なので、falseでもその回の処理は実行される)
繰り返し処理の中で、よく使われる予約語2つ
・continue(特定の条件を満たした時のループ処理をスキップ)
・break(特定の条件を満たした時にループ処理を終了)
今回はwhile文を学習していきます。
while文
まずは書き方ですが、構文で指定されているのは条件式のみです。
while(条件式)
{
//条件がtrueだった時の処理
}
処理できる簡単なコードを書いてみます。
int i = 1;
while (i < 10)
{
Debug.Log(i + "回目の処理");
i++;
}
for文ではループ処理をカウントするループカウンターの設定が必須でしたが、while文ではループカウンターがなくても実行できます。注意することは、上記のサンプルコードでは "i++;" のカウンターがなかった場合に、条件式がfalseになることが無いので、ずっとループ処理を繰り返します。これを"無限ループ"というそうです。while文に限らず、どの繰り返し文でも無限ループには注意が必要です。
実際に実行して処理が止められなくなった場合は、Windowsではタスクマネージャーを開いてアプリ一覧からタスクを強制終了させることができます。これは最後の手段と考えて、まずは無限ループにならないように注意することが大事です。
しかし、正しく設計された無限ループのシステムであれば用途はあるようです。
例えば、インターネットのアカウント登録システムでは24時間ユーザーの入力を受け付け、ユーザーごとに入力情報を整理する処理を繰り返します。サービスが続く限り、アカウント登録システムは回数制限なく稼働し続けてもらう方が都合がいいです。このような場面において無限ループは有効的のようです。
説明が少しずれてしまいましたがコードの書き方に戻ります。
string[] files = new string[]{"file01", "file02", "file03", "file04"};
int i = files.Length; //ファイル数のカウント
while (i > 0) //文字の数だけループ処理
{
Debug.Log("A001_"+ filess[i-1]);
i--;
}
今回はファイル操作のイメージをサンプルコードで書きました。実際のファイルではなく、文字列をファイルの代用にしています。ファイル名の先頭に特定の文字列を付ける処理を行います。
for文で同じ処理をしてみます。
string[] files = new string[]{"file01", "file02", "file03", "file04"};
for (int i = 0; i < files.Length; i++)
{
Debug.Log("A001_" + folders[i]);
}
処理する順番はwhile文と異なりますが、全てのファイル名の先頭に特定のコードを付けることができました。
for文はループ処理の条件が分かりやすく、コードを拡張していくことで、ある程度のループ処理のシステムを組むことができます。ループ処理の多くはfor文で記述されることが多いように思いますが、作りたいシステムによってはwhile文の方がシンプルに記述できるかもしれません。