講義メモ:Chapter 3 繰り返し文を学ぼう

p.098 繰り返し文

・ループともいう
・回数指定、条件指定(前判定)、条件指定(後判定)、全要素の4パターンがある

p.098 繰り返しのフローチャート:補足

・p.098右下のフローチャートは、正しくは「上向き矢印は不要」で、上向き六角形で「ループ開始」を、
 下向き六角形で「ループ終了」を表す。
・p.099中央左のフローチャートも同様に「上向き矢印は不要」。なお、上向き六角形で二重ループを表す際は、
 通常、ループ名を記載して識別する
・p.099中央右のフローチャートも同様に「上向き矢印は不要」。なお、条件によって繰り返しを脱出する構文もあるが、
 通常は条件分岐の後の合流はループ内で行う

p.100 while文

・if文と似た構文で分岐条件の代わりに繰り返しの継続条件を記述する記法
・書式: while (継続条件) { 繰り返し内容 }
・継続条件がtrueである間繰り返すので「●●である間、繰り返す(最初から●●でなければ1度も繰り返さない)」場合に便利
 ※「●●になるまで、繰り返す」ではないので注意

アレンジ演習:p.101 Chap3_2_1

・変数shikinをパブリック変数にして、値を変えて試せるようにしよう

作成例

//アレンジ演習:p.101 Chap3_2_1
using UnityEngine;
public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000; //【移動】パブリック変数に
    void Start() {
        while (shikin >= 0) { //資金がある間、繰り返す
            Debug.Log(shikin);
            shikin = shikin - 5080; //資金から5080を差し引く
        }
    }
}

アレンジ演習:p.101 Chap3_2_1 つづき

・繰り返し終了後の資金の値を表示しよう
・これでは赤字になってしまうので、資金が5080を下回ったら繰り返さないようにしよう

作成例

//アレンジ演習:p.101 Chap3_2_1
using UnityEngine;
public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000; //【移動】パブリック変数に
    void Start() {
        while (shikin >= 5080) { //【変更】資金が5080以上ある間、繰り返す
            Debug.Log(shikin);
            shikin = shikin - 5080; //資金から5080を差し引く
        }
        Debug.Log("終了時の資金は" + shikin); //【追加】
    }
}

補足:定数

・「アレンジ演習:p.101 Chap3_2_1 つづき」では、毎回の差引額(単金)の5080が複数回記述されており、
 変更発生時にミスの原因になりやすい
・そこで「5080」を変数に格納して名前(例:unit)を与えて用いると良い
・この時、プログラム内部のミスなどでこの変数の値を変更してしまわない為に、定数にすると便利。
・定義書式: const 型 定数名 = 初期値; //値を変更できないので必ず初期化すること
・これにより、定数名は「値を示す名前」になり、プログラム中に整数値がそのまま記述されて意味が分かりづらくなる
 (マジックナンバー化する)ことを避けられる

アレンジ演習:p.101 Chap3_2_1 つづき

・5080をint型の定数unitで扱うようにしよう

作成例

//アレンジ演習:p.101 Chap3_2_1
using UnityEngine;
public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000; //【移動】パブリック変数に
    const int unit = 5080; //【追加】単金を表す定数の定義
    void Start() {
        while (shikin >= unit) { //【変更】資金が単金以上ある間、繰り返す
            Debug.Log(shikin);
            shikin = shikin - unit; //【変更】資金から単金を差し引く
        }
        Debug.Log("終了時の資金は" + shikin); //【追加】
    }
}

p.103 変数から少しずつ引く式を理解する

・2項=演算子は「代入」なので、右辺に左辺の変数値を用いることが可能
・これにより、変数の値を元の値を基に変更するような式を記述できる
 例: shikin = shikin - 5080;
 ⇒ 変数shikinの値を得て5080を引いた結果を変数shikinに代入
 ⇒ 変数shikinから5080を差し引く
・他の演算子でも可能で、例えば、西暦4桁を下2桁にするのであれば「y = y % 100;」とすれば良い

p.103 計算もできる代入演算子:複合代入演算子

・多くの2項演算子において、右辺に左辺の変数が含まれる場合の省略記法として複合代入演算子が用意されている
・その1つが「-=」で「変数 = 変数 - 値」を「変数 -= 値」と記述でき「変数から値を差し引く」を表現できる
 例: shikin = shikin - 5080; ⇒ shikin -= 5080;
・他に「足しこむ」の意味になる「+=」や、「*=」「/=」「%=」「&=」「|=」「^=」「<<=」「>>=」が提供されている
・ただし「+=」「-=」以外は日本語表現とマッチしづらいので乱用は避ける方が良い場合もある。
 例えば、西暦4桁を下2桁にするのであれば「y %= 100;」とできるが、やや難読。
・また、他の計算と混ぜると可読性が落ちるので注意
 例: a += b * a / c; ⇒ a = a + (b * a / c);と記述すると誤読を避けやすい

アレンジ演習:p.101 Chap3_2_1 つづき

・複合代入演算子を利用しよう

作成例

//アレンジ演習:p.101 Chap3_2_1
using UnityEngine;
public class chap3_2_1 : MonoBehaviour {
    public int shikin = 30000; //【移動】パブリック変数に
    const int unit = 5080; //【追加】単金を表す定数の定義
    void Start() {
        while (shikin >= unit) { //【変更】資金が単金以上ある間、繰り返す
            Debug.Log(shikin);
            shikin -= unit; //【変更】資金から単金を差し引く
        }
        Debug.Log("終了時の資金は" + shikin); //【追加】
    }
}

p.104 for文

・while文で定型的に行われる回数を指定した繰り返しを簡略に表現できるのがfor文
・よって、for文で書ける繰り返しは全てwhile文でも記述できる
・「何回かわからないが、条件が成立する間繰り返す」時はwhileを、「●回繰り返す」時はforを用いると良い
例:(whileで5回繰り返す場合)
 int counter = 0; //①(カウンタの)初期化
 while (counter < 5) { //② 継続条件
  繰り返し内容
  counter += 1; //③(カウンタの)カウントアップ(※「最終式」ともいう)
 }
例:(上記をforにすると)
 for (int counter = 0; counter < 5; counter += 1) { //①②③をまとめられる
  繰り返し内容
 }
・つまり、for文の書式はwhile(②)に①と③を加えたものになっている
・書式: for(繰り返し前に1度だけ行う処理; 継続条件; 繰り返しの末尾で毎回行う処理) {繰り返し内容}

p.105 インクリメント演算子

・複合代入演算子で1を足しこむ処理はカウントアップなどで多用されるので、専用の単項++演算子が提供されており、
 インクリメント演算子と言われる
・「変数 += 1」は「変数++」または「++変数」と記述できる
・for文のカウントアップのように、1を足しこむ処理を単独で行うのであれば「変数++」「++変数」のどちらでも良い
 ※一般的にfor文では「変数++」を用いることが多い(チームルールで決めることもある)
例:(インクリメント演算子を用いると)
 for (int counter = 0; counter < 5; counter++) { //①②③をまとめられる
  繰り返し内容
 }

アレンジ演習:p.105 Chap3_3_1

・「ハロー」の表示回数(5)をパブリック変数で指定できるようにしよう

提出:アレンジ演習:p.105 Chap3_3_1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です