【Swift】while文の使い方(Swift 2.1、XCode 7.2)
while文とは
while文とは、for文と同じように規則的な処理を繰り返す場合に使われる制御文である。⇒「for文の使い方」
1 2 3 |
while ループ継続条件 { 処理 } |
while文とif文の違い
while文で記述できるコードはfor文で記述できるし、逆に、for文で記述できるコードはwhile文で記述できる。では、なぜwhile文が存在するのか。それは、コードの見やすさに違いがあるためである。
以下のコードは「1回目、2回目、3回目」と出力するのをfor文とwhile文を使って実装したものである。両方とも同じ処理を実行できたが、コードとしてどちらが見やすいと感じただろうか。
コーディング作業に慣れた人にとってはカウンタ変数の扱い(初期化、、継続条件、インクリメント)が1行にまとまっているfor文のほうが見やすいと感じる。また、while文は頑張ればもう少しコーディングの行数を減らせるが、カウンタ変数の扱いが別の行に分散しているのは見にくいと感じることが多い。
よって、決められた回数ループをするような処理ではfor文を使った方がスマートとなる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* ** for文とwhile文の見た目の違い */ //for文 for(var i=1 ; i<4 ; i++){ print("\(i)回目") } //実行結果 //1回目 //2回目 //3回目 //while文 var i = 1 while(i<4){ print("\(i)回目") i++ } //実行結果 //1回目 //2回目 //3回目 |
一方、以下のコードはループ内で0~2のランダム整数を発生させ、2の場合に変数の値をインクリメントし、変数の値が3以下のあいだループを繰り返す処理である。
for文とwhile文でコーディング行数に違いは無いが、for文には余計なセミコロン「;」があり見にくいと感じる。このようにループ回数は定まってなくて、ループ内の処理によってカウンタ変数やループ継続条件を制御する処理ではwhile文を使った方がスマートになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
/* ** for文とwhile文の見た目の違い */ //for文 var member = 0 //ループ前で使用している変数とする for(;member < 3;){ var a = arc4random_uniform(3) //0から2の乱数を取得 if(a == 2){ member++ //乱数が2だった場合、変数をインクリメント } else { print("現在のtestの値は\(test)") } } //実行結果(実行の度に結果が異なる) //現在のtestの値は0 //現在のtestの値は1 //現在のtestの値は1 //現在のtestの値は2 //while文 var member = 0 while(member < 3){ var a = arc4random_uniform(3) //0から2の乱数を取得 if(a == 2){ member++ //乱数が2だった場合、変数をインクリメント } else { print("現在のtestの値は\(test)") } } //実行結果(実行の度に結果が異なる) //現在のtestの値は0 //現在のtestの値は0 //現在のtestの値は1 //現在のtestの値は2 |
break, continue
for文でも使えるが、while文ではbreak、continueがよく使われる。
breakはループを中断してループの外に抜ける命令。continueはループの先頭に飛んでループを再開する命令である。
以下のコードはwhile文の中で0から4のランダム整数を発生させ、2の場合はループを中断し、1の場合はループの先頭に戻ってループを再開、それ以外は回数を画面に出力する記述例である。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* ** continue,breakの使用例 */ var test = 1 while (true){ var a = arc4random_uniform(5) //0から4の乱数を取得 if(a == 2){ break } else if(a == 1){ continue } print("\(test++)回目") } print("ループが終了しました") //実行結果(実行の度に結果が異なる) //1回目 //2回目 //3回目 //ループが終了しました |
repeat-while文
通常のwhile文はループ継続条件をチェックしたあとにループに入るので、ループ継続条件を満たさない場合は1回もループ内の処理が行われずにループを抜ける。しかし、いかなる場合も必ず1回はループ内の処理をさせたいときがある。そんな時はrepeat-while文を利用する。
以下のように、whileを末尾に移動した書き方になる。Swift2.0以前ではdo-while文で記述していたが、例外処理のdo-catch文との混合を避けるためrepeat-whle文に変更された。
1 2 3 4 |
repeat { 処理 } while (ループ継続条件) |
以下のコードは、回数を出力し、ランダム整数値が2の場合ループを抜けるコード例である。最初の1回目は必ずループ内の処理が行われる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* ** do-while文の使用例 */ //ランダム変数が2の場合にループを抜ける var test = 1 repeat{ print("\(test++)回目") if(arc4random_uniform(5) == 2){ test = 100 } } while (test < 100) print("ループが終了しました") //実行結果(実行の度に結果が異なる) //1回目 //2回目 //ループを終了しました |