講義メモ ・p.092「エラーメッセージを読み解こう②」から再開して、Chapter3に進みます 提出:アレンジ演習:p.091 Chap2_7_3 ・「9」をパブリック変数で与えるようにしよう ・変数値を用いて「●は2のべき乗ではない」と表示するようにしよう ・パブリック変数が負の数の場合の動作を確認しよう  ⇒負の数は(絶対値が2のべき乗であっても)2のべき乗ではない 作成例 //アレンジ演習:p.089 Chap2_7_2 using UnityEngine; public class Chap2_7_3 : MonoBehaviour { public int n = 9; void Start() { if(!Mathf.IsPowerOfTwo(n)) { //nが2のべき乗ではない? Debug.Log("2のべき乗ではない"); } } } p.092 エラーメッセージを読み解こう② ・中カッコ{}などのペアになっている記号のアンマッチによるエラーは、真の原因である場所にはエラー表示がされないことが多い ・中カッコ{}については、Visual Studioの自動インデントを活かすことで確認可能 ・Ctrl+A,K,D でデフォルト設定になるので、事前に設定を見直すと良い。 ・「ツール」「オプション」で「テキストエディタ」「C#」「コードスタイル」「書式設定」の中 p.094 復習ドリル Chap2_9_1.cs 作成例 using UnityEngine; public class Chap2_9_1 : MonoBehaviour { public int age; void Start() { if (age < 6) { Debug.Log("幼児"); } } } p.094 復習ドリル Chap2_9_2.cs 作成例 using UnityEngine; public class Chap2_9_2 : MonoBehaviour { public int age; void Start() { if (age <= 5 || age >= 65) { //【修正】&&⇒|| Debug.Log("幼児と高齢者"); } } } p.095 正誤:if文で「空(から)」かどうかチェックする ・これはC/C++の説明になっており、C#では文法エラーになる ・空の文字列かどうかの比較は「変数名 == ""」などとする ・なお、C#ではif文に真偽値を返す式以外を渡すことはできない。数値を真偽値の代わりに用いることもできない。空の文字列でfalseを表すこともない。 補足:条件演算子 ・p.039「演算子の優先順位一覧」の下から2行目にある「条件」は条件演算子で、C#では唯一の3項演算子。 ・書式: bool型の値または式 ? 式がtrueの場合の値または式 : 式がfalseの場合の値または式 ・なお、可読性を上げる目的で「bool型の値または式」をカッコで囲むことが多い ・例: string s; s = (a > b) ? "aはbより大" : "aはb以下"; ・例: Debug.Log((a > b) ? "aはbより大" : "aはb以下"); ・よって、なんらかの値を返すことが目的のシンプルなif-else構文は条件演算子にすると、短い行数で見やすく記述できることがある ・ただし、if文とは異なり、elseにあたる「式がfalseの場合の値または式」は必須 ・例: Debug.Log((a > b) ? "aはbより大" : ""); //無文字列を返すと良い ミニ演習 mini093a.cs ・p.081 Chap2_5_1 を条件演算子で記述しよう 作成例 using UnityEngine; public class mini093a : MonoBehaviour { public int age; void Start() { Debug.Log((age < 20) ? "未成年" : "成人"); //条件によって表示 } } ミニ演習 mini093b.cs ・int型のパブリック変数a、bの差を表示しよう ・なお、差とは「大きい方から小さい方を引いた値」とする ・また、2つの値の大きい方と、小さい方を表示しよう ・例:「差は▼で、大きい方は●で、小さい方は■」 作成例 using UnityEngine; public class mini093b : MonoBehaviour { public int a, b; void Start() { int max = (a > b) ? a : b, min = (a < b) ? a : b; Debug.Log("差は" + (max - min) + "、大きい方は" + max + "、小さい方は" + min); } } ミニ演習 mini093c.cs ・p.085 Chap2_6_1 を条件演算子で記述しよう 作成例 using UnityEngine; public class mini093c : MonoBehaviour { public int age; void Start() { Debug.Log((age < 20) ? "未成年" : (age < 65) ? "成人" : "高齢者"); //表示 } } ミニ演習 mini093d.cs ・int型のパブリック変数a、b、cの最大値を条件演算子で表示しよう 作成例 using UnityEngine; public class mini093d : MonoBehaviour { public int a, b, c; void Start() { int w = (a > b) ? a : b; //まずaとbの大きい方をwとする Debug.Log("最大値は" + ((w > c) ? w : c)); //wとcの大きい方が最大値 //上記を1行にできる Debug.Log("最大値は" + ((a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c))); } } 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 次回予告:p.105「インクリメント演算子:補足(前置と後置の違い)」の後でp.106「メッセージの中に回数を入れる」に進みます