p.076 if文
・条件に応じて実行内容を変更できるのが分岐構文で、最も代表的な分岐構文がif文。
・書式例: if(bool型の式){式がtrueの場合に実行する文; …}
・bool型の式として、比較演算子の式を用いると「●が■なら▲する」という構文を記述しやすい
・例: if (a > 0) { Debug.Log("aは正の数"); }
・ifの{}をブロック(ifブロック)といい、通常、内容をインデントして対象範囲をわかりやすくする(VSでは自動的に行われる)
・テキストでは「Tabキーを押して」とあるが、複数個のスペースでも良く、チームルールが決められていることもある。
アレンジ演習:p.077 Chap2_4_1
・「●歳は未成年」というように、ageの値も表示しよう
作成例
using UnityEngine;
public class Chap2_4_1 : MonoBehaviour {
public int age;
void Start() {
if (age < 20) { //ageの値が20未満?
Debug.Log(age + "歳は未成年"); //表示
} //ageの値が20以上ならばなにも表示しない
}
}
p.078 ブロック内で複数の処理を行う
・ブロック内で複数の処理を行うことができる
・なお、ブロック内が1文であれば{}を省略できるが、推奨されない場合もある
※if文の対象範囲がわかりづらくなり、保守性が下がる懸念があるため
アレンジ演習:p.077 Chap2_4_1⇒Chap2_4_2
・未成年であれば、成年まであと何年かも表示しよう ・例: 「19歳は」 「未成年」 「成年まであと1年」
作成例
using UnityEngine;
public class Chap2_4_1 : MonoBehaviour {
public int age;
void Start() {
if (age < 20) { //ageの値が20未満?
Debug.Log(age + "歳は"); //表示
Debug.Log("未成年"); //表示
Debug.Log("成年まであと" + (20 - age) + "年"); //【追加】
} //ageの値が20以上ならばなにも表示しない
}
}
p.079 ブロックとフローチャート:分岐からの合流
・分岐構造のポイントは入口も出口も1つずつであり、どう分岐しても必要な処理を終えたら合流する ※まれに合流せずに終了する場合もあるが、本来の形ではない
アレンジ演習:p.077 Chap2_4_1⇒Chap2_4_2 つづき
・p.079の通りブロックの外で「ブロック外だよ」を表示しよう ・すると、未成年の場合もそうではない場合も「ブロック外だよ」が表示されることを確認しよう
作成例
using UnityEngine;
public class Chap2_4_1 : MonoBehaviour {
public int age;
void Start() {
if (age < 20) { //ageの値が20未満?
Debug.Log(age + "歳は"); //表示
Debug.Log("未成年"); //表示
Debug.Log("成年まであと" + (20 - age) + "年");
}
Debug.Log("ブロック外だよ"); //常に表示される //【追加】
}
}
p.080 else文
・1つのifには1つだけelseとそのブロックを追記して「●が■なら▲する、でなければ▼する」という構文を記述できる
・elseも対象が1文のみであれば{}を省略できるが、推奨されないことがある。
※ ifの{}があるときに、elseの{}を省略するのは避けた方が良い。
・対応するifがないelseは文法エラーになる
アレンジ演習:p.081 Chap2_5_1
・未成年であれば「成年まであと何年」を表示しよう ・成年であれば、「成年からもう何年」も表示しよう
作成例
using UnityEngine;
public class Chap2_5_1 : MonoBehaviour {
public int age;
void Start() {
if (age < 20) { //ageの値が20未満?
Debug.Log("未成年"); //表示
Debug.Log("成年まであと" + (20 - age) + "年");
} else {
Debug.Log("成人"); //表示
Debug.Log("成年からもう" + (age - 20) + "年");
}
}
}
p.84 else-if文
・if文にelse-ifを書き加えることで「●が■なら▲する、ではなく▼ならば★する」という構文を記述できる
例:if(a < 20) { Debug.Log("未成年"); }
else if(a > 60) { Debug.Log("高齢者"); }
・else-ifは複数記述できる
・最後のelse-ifの後に1つだけelseブロックが記述できる
・これにより「上記のどれにも当てはまらない場合は☆する」という構文が可能
アレンジ演習:p.081 Chap2_6_1
・未成年であれば「成年まであと何年」を表示しよう ・成年であれば、「成年からもう何年」も表示しよう ・高齢者であれば、上記は表示しなくて良い
作成例
using UnityEngine;
public class Chap2_6_1 : MonoBehaviour {
public int age;
void Start() {
if (age < 20) { //ageの値が20未満?
Debug.Log("未成年"); //表示
Debug.Log("成年まであと" + (20 - age) + "年");
} else if (age < 65) { //ではなくて(20以上で)65未満?
Debug.Log("成人"); //表示
Debug.Log("成年からもう" + (age - 20) + "年");
} else { //上記のどれもなければ(65以上?)
Debug.Log("高齢者"); //表示
}
}
}
p.84 else-if文:補足
・同じ変数を比較に用いる場合などで、else-if構造にすると、分岐の順序によって実行されない部分ができてしまうことに注意を。 ・例えば、Chap2_6_1で「age < 20」と「age < 65」を逆にすると「未成年」が表示されなくなる ・VSでは可能な限り、このような問題点を指摘してくれるが、されないこともある
アレンジ演習:p.081 Chap2_6_1:つづき
・ifの条件とelse-ifの条件、それぞれの実行内容を取り換えるとどうなるか確認しよう ⇒文法エラー等にはならず警告も表示されないが、絶対に実行されない部分ができてしまう
作成例
using UnityEngine;
public class Chap2_6_1 : MonoBehaviour {
public int age;
void Start() {
if (age < 65) { //ageの値が20未満?
Debug.Log("成人"); //表示
Debug.Log("成年からもう" + (age - 20) + "年");
} else if (age < 20) { //ではなくて(20以上で)65未満? ←無意味
Debug.Log("未成年"); //表示 ←ageがどんな値でも実行されない
Debug.Log("成年まであと" + (20 - age) + "年"); //←同上
} else { //上記のどれもなければ(65以上?)
Debug.Log("高齢者"); //表示
}
}
}
提出:アレンジ演習:p.081 Chap2_6_1:つづき②
・上記の変更を元に戻してから、ageが負の数であれば「負の数は用いない」と表示する処理を追加しよう