補足:前判定繰り返しと後判定繰り返し
・繰り返しには繰返し条件の判断タイミングで、前判定と後判定がある ・while文とfor文は前判定であり、繰り返しの初回を行う前に継続条件を評価する ・よって、最初から継続条件がfalseになる場合、1度も実行しないので、そのような場合に便利 例:モンスターがいる間、戦う=いなければ1度も戦わない場合、事前にモンスターがいるかどうかの判断は不要になる ・しかし、繰り返しを行ってから続けるかどうか判断する場合に不便なので、後判定繰り返しの構文としてdo-while文も提供されている
補足:do-while文
・唯一の後判定繰り返しの構文
・書式: do { 繰り返し内容 } while(継続条件); //末尾にセミコロンが必要
・p.101 chap3_2_1のように「●●した結果、●●になるまで繰返す」処理に向いている
・あるいは、動的に情報を得る処理で「適切な情報が得られるまで先に進まない」場合に便利
・なお、この場合の継続条件は「適切ではない情報が得られている間」になる
ミニ演習 mini108c.cs
・p.101 chap3_2_1をdo-while文で書き直そう
作成例
//ミニ演習 mini108c.cs :p.101 chap3_2_1をdo-while文で
using UnityEngine;
public class mini108c : MonoBehaviour {
public int shikin = 30000; //パブリック変数で資金を
const int unit = 5080; //単金を表す定数の定義
void Start() {
do { //【変更】以下繰返し
Debug.Log(shikin);
shikin -= unit; //資金から単金を差し引く
} while (shikin >= unit); //【変更】資金が単金以上ある間、繰り返す
Debug.Log("終了時の資金は" + shikin);
}
}
p.109 繰り返しからの脱出
・繰り返しの終了は本来は継続条件がfalseになった時が望ましい ・しかし、例外的状況の発生や、継続条件が複雑な場合に、脱出用の文として、breakを利用できる ・switch文でも使われていたように、breakはブロック脱出文であり、while/for/doでも利用可能 ・なお、while(true)やfor(;;)で無限ループにしておき、なんらかの状況によりbreakで脱出するケースは(特にゲームでは)多い ・breakはいくつでも記述できるが、break直後に処理文があると絶対に実行されないので、文法エラーになる ・なお、breakにより、breakがある繰り返しブロックの末尾の「}」の後ろへジャンプするので、後続の処理が実行される(終了とは限らない) ・また、多重ループの場合、外側のループは継続される(後述)
ミニ演習 mini109a.cs
・p.105 chap3_3_1で「ハロー」の表示回数(5)をパブリック変数で指定できるようにしよう ・ただし、6回目になったらbreakするようにしよう ・つまり、繰り返し回数を自由にする代わりに、リミッターを儲けたい場合にbreakは便利 ・また、forブロックの末尾の「}」の後に適当なDebug.Logを追記し、breakした場合にも実行されることを確認しよう
作成例
//ミニ演習 mini109a.cs :p.105 Chap3_3_1・改
using UnityEngine;
public class mini109a : MonoBehaviour {
public int num = 5; //パブリック変数で回数を指定
void Start() {
for (int cnt = 0; cnt < num; cnt++) { //num回繰り返す
Debug.Log(cnt + "回目のハロー!");
if (cnt >= 6) { //ただし6回以上になったら
break; //脱出する
}
Debug.Log("次へ!"); //breakすると実行されない
}
Debug.Log("終了!"); //breakしても実行される
}
}
p.109 繰り返しのスキップ:continue
・for/while/doの中で「continue;」を実行すると、実行中の繰り返しの後続部分をスキップして、続行できる ・つまり「今回は、ここまででOKなので、次へ行け」としたい場合に用いる ・よって、break;とは異なり、繰り返しは続行される ・主に、繰り返しの中に特殊パターンがあり、if文などでは表現しづらい場合に便利 ・あるいは、繰り返し内容が長く、ifなどのネストが深い場合に用いると読みやすくなることがある
ミニ演習 mini109b.cs
・1から10まで下記を繰返す ① 3の倍数ならば ・「3の倍数」と表示 ・しかも、偶数ならばこれ以降はスキップする ② カウンタの値を表示
作成例
using UnityEngine;
public class mini109b : MonoBehaviour{
void Start() {
for(int i = 1; i <= 10; i++) {
if (i % 3 == 0) { //3の倍数?
Debug.Log("3の倍数");
if (i % 2 == 0) { //しかも偶数?
continue; //これ以降はスキップして次へ
}
}
Debug.Log("カウンタは" + i);
}
}
}
ミニ演習 mini109c.cs:breakとcontinueの併用
・string型のパブリック変数flgを定義して"y"で初期化しておく ・1から10まで下記を繰返す ① 3の倍数ならば ・flgが"y"であれば、スキップ(continue)する ・flgが"y"以外であれば、繰り返しを脱出(break)する ② カウンタの値を表示 ・表示した値の合計を表示
提出:ミニ演習 mini109c.cs:breakとcontinueの併用