講義メモ

・条件演算子の補足をしてから、p.092「エラーメッセージを読み解こう②」に進みます

【補足】条件演算子(p.039):再掲載

・if-else構文による判断結果の代入を、3項演算子で表現できる仕掛け
・例: int a = 2, b = 3, max = (a > b) ? a : b; //a > b ならaをでなければbを代入
・書式: (条件式などのbool型の式) ? 式がtrueの時の値 : 式がfalseの時の値
・これを用いると、p,081 Chap2_5_1のif-elseの5行が1行になる
 → Debug.Log((age < 20) ? "未成年" : "成人");
・なお「:」以降の省略は不可(if文でいうifのみ記述は不可)

提出フォロー:ミニ演習 mini091

・上記の通り、p,081 Chap2_5_1を書き換えてみよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini091 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        //ageの値が20未満なら"未成年"を、でなければ"成人"を表示
        Debug.Log((age < 20) ? "未成年" : "成人"); 
    }
    void Update() {

    }
}

ミニ演習 mini091a

・p,085 Chap2_6_1を条件演算子で書き換えてみよう
・構文: (条件文①) ? 値① : ((条件文②) ? 値② : 値③)

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini091a : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        //ageの値が20未満なら"未成年"を、でなければ、
        //ageの値が65未満なら"成人"を、でなければ"高齢者"を表示
        Debug.Log((age < 20) ? "未成年" : (age < 65) ? "成人" : "高齢者");
    }
    void Update() {

    }
}

ミニ演習 mini091b

・int型のパブリック変数aとbの差を表示しよう
・差とは大きい方ー小さい方とする
・同値ならどちらから引いてもゼロなので単純に引き算でOK

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini091b : MonoBehaviour {
    public int a, b; //パブリック変数
    void Start() {
        //差を表示
        Debug.Log((a > b) ? a - b : b - a); //大きい方ー小さい方
    }
    void Update() {

    }
}

ミニ演習 mini091c

・int型のパブリック変数a,b,cの最大値を表示しよう
・aとbの最大値は「(a > b) ? a : b」で得られる
・この値とcの大きい方が最大値になる

作成例1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini091c : MonoBehaviour {
    public int a, b, c; //パブリック変数
    void Start() {
        int max = (a > b) ? a : b; //a,bの最大を得る
        Debug.Log((max > c) ? max : c); //a,bの最大とcを比較
    }
    void Update() {

    }
}

作成例2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini091c : MonoBehaviour {
    public int a, b, c; //パブリック変数
    void Start() {
        Debug.Log((a > b) ? (a > c) ? a : c : //a>bならaとcで最大決定
                            (b > c) ? b : c); //a<bならbとcで最大決定
    }
    void Update() {

    }
}

p.092 エラーメッセージを読み解こう

・ミスの場所とエラーの表示場所がずれるのでわかりづらいのが「カッコの非対応」
・特に、足りないカッコを適当に帳尻合わせすると状況が悪化しやすい
・このタイプのエラーが出たら、インデントをしっかり行い、対応をていねいに確認しよう
・例:mini091cで「public class mini091c : MonoBehaviour {」の直後に「}」がある場合
 → Startメソッド全体がエラーになり、C#側では13個のエラーが表示される
 Unity側では2個のエラーが表示される
 ① Top-level statements must precede namespace and type declarations.
 ② Type or namespace definition, or end-of-file expected
・例:mini091cで「void Start() {」の直後に「}」がある場合
 → Startメソッド以降がエラーになり、C#側では40個のエラーが表示される
 Unity側では19個のエラーが表示される
・テキストに記述の「予期しない'}'」の例は、常にこうなるとは限らない
・例:mini091cで最後の「}」を消してしまった場合
 → C#側でもUnity側でも「} が必要です」「} expected」というエラーになる
・テキストに記述の「予期しないファイルの終端」の例も、常にこうなるとは限らない

p.092 エラーメッセージを読み解こう(つづき)

・また、C#およびUnityのバージョンアップによって、テキストとは異なるメッセージが表示される場合がある
・p.092「else ifの半角空きを忘れた場合」では、
 C#側で「;が必要です」「現在のコンテキストに'elseif'という名前は存在しません」の2エラー、
 Unity側で「; expected」の1エラーになる

p.093 Visual Studioでカッコの対応を確認する

・「()」「{}」「[]」「""」において始まりの方の1文字前をクリックすることで対応する相手が
 ハイライト表示される

p.094 復習ドリル 問題1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap2_9_1 : MonoBehaviour {
    public int age;
    void Start() {
        if (age < 6) {
            Debug.Log("幼児");
        }
    }
    void Update() {
        
    }
}

p.094 復習ドリル 問題2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class chap2_9_2 : MonoBehaviour {
    public int age;
    void Start() {
        if (age <= 5 || age >= 65) { //「&&」ではなく「||」
            Debug.Log("幼児と高齢者");
        }
    }
    void Update()
    {
        
    }
}

今週の話題

販売本数ランキング 今回トップは「ドラゴンクエストモンスターズ3 魔族の王子とエルフの旅(Switch)」GO!
“ゲームアワード 2023”受賞作まとめ。『バルダーズ・ゲート3』がGOTYを始め6冠に。『Alan Wake 2』は3部門で受賞【The Game Awards】GO!
1200作品から選ばれた14作品―「ゲームクリエイター甲子園 2023」総合大賞ファイナリスト14作品発表 GO!
任天堂/ハピネット等新たなスポンサー4社が参加―「Indie Developers Conference 2023」セッション/ライトニングトークのタイムテーブル発表 GO!
Best Esports Gameは『Valorant』が受賞!選手やコーチなどeスポーツ関連一斉発表【TGA2023】GO!

有料Modのサポートを開始した『スカイリム』完全新作のみを取り扱い、AI生成物の使用は禁止に GO!
「Nintendo Live 2024 TOKYO」が執拗な脅迫行為により中止に…『スプラ3』バンカライブや『ゼルダ』コンサートなどが予定されていた GO!
2年半に渡る『Destiny2』不正行為巡るBungieとチート販売業者の訴訟が来週陪審裁判へ―議論の焦点は「著作権」にあり GO!

前回のコメント

・用語が増えてきて混乱しましたが、内容自体はよく理解できました
・省略が効くのはスッキリして見やすくなる感じがするので好印象でした

 何よりです。

・elseの使い方が複雑になって少し理解に時間がかかりました。

 少しずつ複雑になっていきますので、しっかりと理解を深めてください。

・ペースについては今回もちょうどよかったです。
・次回もよろしくお願いします

 了解です。リアクション感謝します。こちらこそよろしくお願いいたします。

講義メモ 後半

p.090 論理演算子(2項||演算子)

・2項||演算子:左辺と右辺がbool型(p.56)であれば、bool型を返す。
 どちらもfalseならfalseを、でなければtrueを返す。よってオア(または)と呼ばれることがある
・if文の条件式に用いると「if(a > 0 || b > 0)」なら「aは正の数、または、bは正の数」と意味する
・論理演算の用語では「論理和」ともいう
・この演算子は、2つの不等式を両辺に置くことで、値の範囲外をチェックするときに便利
 例: if(a < 1 || a >= 10) { //aが1未満または10以上であれば
・ただし、同時に成立する式にせぬよう注意
 例: if(a >= 1 || a <= 10) { //aが1以上または10以下であれば ←全部になり意味がない

p.090 Chap2_7_2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_7_2 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age <= 5 || age >= 65) { //ageの値が5以下または65以上なら
            Debug.Log("幼児と高齢者");
        }
    }
    void Update() {

    }
}

【補足】複数の||演算子

・2つ以上の||演算子を並べて記述できる
例: a > 0 || b > 0 || c > 0
・この場合、最初の||でtrueにならなければ、それ以降は無視される
・よって、この構文の後半以降にミスがあると発覚しづらいので注意

【補足】||演算子と短絡評価

・1つの||演算子においても「結果が見えているときは無駄なことはしない」という機能が働く
・つまり、||演算子は左辺がtrueだと、右辺がtrueでもfalseでもtrue確定なので、右辺は見なくなる
・このことも短絡評価(ショートサーキット)という
・これを活用して、プログラムの異常終了を防止できるテクニックがある
例: if(a == 0 || 5 / a > 2) //aが0だと右辺が無視されるので、ゼロ除算による異常終了を防ぐ

【補足】&&演算子と||演算子の併用と優先順位

・&&演算子と||演算子の併用が可能だが、優先順位に注意
・&&演算子の方が||演算子より優先される
例: if(a > 0 || b > 0 && c > 0) //aが正の数または、bもcも正の数

p.091 単項!演算子

・右辺がbool型(p.56)であれば、反転したbool型を返す。
 つまりtrue⇔falseの反転が可能。よってナット(否定)と呼ばれることがある
・主に、複雑な条件を反転したほうがわかりやすい場合や、bool型を返すメソッドを呼んで結果を反転したい場合に用いる
・例: if(!(a == 0 && b == 0 && c == 0)) //「abcがすべてゼロ」じゃなければ
 ちなみに、これは if(a != 0 || b != 0 || c != 0)) と同じだが、わかりやすい方を用いると良い
・なお、単純にbool型の変数の値をtrue⇔falseの反転をしたい場合にも用いる
 例: bool a = true, b = !a; //bにはaのtrueを反転したfalseが入る

p.091 Chap2_7_3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_7_3 : MonoBehaviour {
    void Start() {
        if (!Mathf.IsPowerOfTwo(9)) { //「9が2のべき乗なら」の否定
            Debug.Log("2のべき乗ではない");
        }
    }
    void Update() {

    }
}

アレンジ演習:p.091 Chap2_7_3

・9を固定ではパブリック変数にして、外部から与えられるようにしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_7_3 : MonoBehaviour {
    public int n; //【追加】パブリック変数「
    void Start() {
        if (!Mathf.IsPowerOfTwo(n)) { //【変更】「nが2のべき乗なら」の否定
            Debug.Log("2のべき乗ではない");
        }
    }
    void Update() {

    }
}

【補足】!演算子と&&演算子と||演算子の併用と優先順位

・!演算子と&&演算子と||演算子の併用が可能だが、優先順位に注意
・!演算子と、&&演算子、||演算子の順に優先される

【補足】!演算子と&&演算子と||演算子の併用とドモルガンの法則

・「論理積の式全体を否定すると、それぞれの否定の論理和になる」という法則
・例:!(a > 0 && b > 0) ⇒ !(a > 0) || !(b > 0) //どちらも「aもbも正の数」の否定
・また「論理和の式全体を否定すると、それぞれの否定の論理積になる」
・例:!(a > 0 || b > 0) ⇒ !(a > 0) && !(b > 0) //どちらも「aかbが正の数」の否定
・よって、否定の否定を含むような複雑な式は、この法則を用いて整理すると見やすくなることがある

【補足】条件演算子(p.039)

・if-else構文による判断結果の代入を、3項演算子で表現できる仕掛け
・例: int a = 2, b = 3, max = (a > b) ? a : b; //a > b ならaをでなければbを代入
・書式: (条件式などのbool型の式) ? 式がtrueの時の値 : 式がfalseの時の値
・これを用いると、p,081 Chap2_5_1のif-elseの5行が1行になる
 → Debug.Log((age < 20) ? "未成年" : "成人");
・なお「:」以降の省略は不可(if文でいうifのみ記述は不可)

提出:ミニ演習 mini091

・上記の通り、p,081 Chap2_5_1を書き換えてみよう

講義メモ

・p.084「else if文」から

提出フォロー アレンジ演習:ex082

・p.081 Chap2_5_1をアレンジして「"未成年"」または「"成人"」の前に「●歳は」を表示しよう
・また、「"未成年"」または「"成人"」の後に「"です"」を表示しよう
・それぞれの表示は1つずつの記述にすること

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ex082 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        Debug.Log(age + "歳は"); //【追加】ageの値に連結して表示
        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log("未成年"); //"未成年"を表示
        } else { //ageの値が20未満でない(20以上)なら以下を行う
            Debug.Log("成人"); //"成人"を表示
        }
        Debug.Log("です"); //【追加】
    }
    void Update() {

    }
}

アレンジ演習:ex082・改

・表示を連結して1回の記述にしよう
・文字列型の変数を用いると良い
・Debug.Logをif-elseを抜けてから行うこと

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ex082 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        string str = age + "歳は"; //【変更】ageの値に連結して格納
        if (age < 20) { //ageの値が20未満なら以下を行う
            str = str + "未成年"; //【変更】"未成年"を連結
        } else { //ageの値が20未満でない(20以上)なら以下を行う
            str = str + "成人"; //【変更】"成人"を連結
        }
        Debug.Log(str + "です"); //【変更】"です"を連結して表示
    }
    void Update() {

    }
}

p.084 else if文

・多分岐構造を実現する構文がif-else if構文で、else ifは「ではなくて、もしも」を意味する
・else ifはifの後であればいくつでも記述できる(ifの前は不可)
・また、elseの上に記述できる(elseの後は不可)
・書式: 
 if(条件式①) {
  ①がtrueの場合の処理
 } else if(条件式②) {
  ①がfalseで②がtrueの場合の処理
 } else {
  ①も②もfalseの場合の処理
 }
・なお、ifの条件式①に含まれるような条件②にすると、else ifの内容は実行されない

p.085 Chap2_6_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_6_1 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log("未成年"); //"未成年"を表示
        } else if (age < 65) { //ageの値が20未満ではなく65未満なら以下を行う
            Debug.Log("成人"); //"成人"を表示
        } else { //どちらでもないなら(65以上なら)以下を行う
            Debug.Log("高齢者"); //"高齢者"を表示
        }
    }
    void Update() {

    }
}

p.087 else if文で起こりやすいミス

・if-else if-else構文で書区べきプログラムで、誤って「else if」を「if」にすると、文法エラーにならず、
 実行も分岐によっては変わらないのでミスに気づきづらいので注意
・下の例では、20以上や65以上での処理は変わらないが、20未満の時のみ誤動作する(未成年と成人の両方が表示
 されてしまう)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_6_1 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log("未成年"); //"未成年"を表示
        } if (age < 65) { //ageの値が20未満ではなく65未満なら以下を行う【誤り】
            Debug.Log("成人"); //"成人"を表示
        } else { //どちらでもないなら(65以上なら)以下を行う
            Debug.Log("高齢者"); //"高齢者"を表示
        }
    }
    void Update() {

    }
}

・これは内部的には2つのif文になっているので、下記が動作していると考えると良い

        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log("未成年"); //"未成年"を表示
        } //【ここで一度切れている】
        if (age < 65) { //ageの値が20未満ではなく65未満なら以下を行う【誤り】
            Debug.Log("成人"); //"成人"を表示
        } else { //どちらでもないなら(65以上なら)以下を行う
            Debug.Log("高齢者"); //"高齢者"を表示
        }

アレンジ演習:p.085 Chap2_6_1

・4分岐にして、6歳未満の場合「幼児」と表示しよう。

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_6_1 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age < 6) { //【追加】ageの値が6未満なら以下を行う
            Debug.Log("幼児"); //【追加】"幼児"を表示
        } else if (age < 20) { //【変更】ageの値が6未満ではなく20未満なら以下を行う
            Debug.Log("未成年"); //"未成年"を表示
        } else if (age < 65) { //ageの値が20未満ではなく65未満なら以下を行う
            Debug.Log("成人"); //"成人"を表示
        } else { //どちらでもないなら(65以上なら)以下を行う
            Debug.Log("高齢者"); //"高齢者"を表示
        }
    }
    void Update() {

    }
}

p.088 論理演算子

・2項&&演算子:左辺と右辺がbool型(p.56)であれば、bool型を返す。
 どちらもtrueならtrueを、でなければfalseを返す。よってアンド(かつ)と呼ばれることがある
・if文の条件式に用いると「if(a > 0 && b > 0)」なら「aは正の数、かつ、bも正の数」と意味する
・論理演算の用語では「論理積」ともいう
・この演算子は、2つの不等式を両辺に置くことで、値の範囲をチェックするときに便利
 例: if(a >= 1 && a <= 10) { //aが1以上10以下であれば
・ただし、同時に成立しない式にせぬよう注意
 例: if(a >= 11 && a <= 10) { //aが11以上10以下であれば ←ありえない

p.089 Chap2_7_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_7_1 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age >= 6 && age <= 15) { //ageの値が6以上かつ15以下なら
            Debug.Log("義務教育の対象");
        }
    }
    void Update() {

    }
}

今週の話題

販売本数ランキング 今回トップも「桃太郎電鉄ワールド ~地球は希望でまわってる!~(Switch)」GO!
「イケメンシリーズ」のアエリアが業績予想を下方修正―大規模な再編・改革が必要か?【ゲーム企業の決算を読む】GO!
「実写×Live2D」の映像作品がグランプリ受賞―「Live2D Creative Awards 2023」結果発表 GO!
「Live2D」は海外ユーザーの需要が急増中―AI研究も語られた「alive 2023」基調講演レポート GO!
『ブルーアーカイブ』の世界累計収益4億ドル突破―その75%を日本市場が占める GO!
ゲーム内に「自分の声」を実装できるかも? EAが“プレイヤーの声から生成したボイス”導入技術の特許を申請中 GO!
Epic Games Japan主催の勉強会「EOS / UE5 Deep Dive 2023」秋葉原で開催…一般枠の抽選申込み受付中 12/14・15 GO!

『Dave the Diver』はインディーゲームなのか?ジェフ・キーリー氏が自らの考えを明かす GO!
AI向けに改造されたGeForce RTX 4090の写真が中国で公開。米国による輸出禁止前の駆け込み需要か GO!
今年は乱入対策もばっちりか?2022年開催時不審者騒ぎのあった「The Game Awards」警備を強化予定 GO!

前回のコメント

・今までよりも拡張性の高そうなところの学習に入ってきたので面白かったです

 何よりです。

・最後のアレンジ演習で●歳はのところでifとelseで2回書いてしまったのでこういうのをなくしていきたいです。

 制御構造はややわかりづらいですが、何度か書いていると慣れますので大丈夫。

・ペースもちょうどよかったです

 了解です。リアクション感謝します。

・次回もよろしくお願いします

 こちらこそ、宜しくお願い致します。

講義メモ:Chapter 2

Chapter 2 条件によって分かれる文を学ぼう

p.069 trueとfalse

・C#などでは、数値等とは別に真偽値を表現・利用できる仕組みを提供している
 ※ C言語にはないので、代わりに0と非0で表現する
・それがbool型(p.056)で、分岐構文のポイントになっている
・真偽値を示す真偽値リテラルのtrueは「条件に一致」として、falseは「不一致」として扱う
・数値を返す演算子(例:+,-,*,/)や数値を返すメソッド(例:Mathf.Max,Min,Sqrt)と同様に、真偽値を返す演算子やメソッドがある
・これらを分岐の「条件」として利用できる
・真偽値を返す演算子の例が2項<演算子で、左辺が右辺より小さければtrueを、でなければfalseを返す
・真偽値を用いて条件分岐を表すのがif文
・最もシンプルな構文: if(真偽値を返す値や式) { カッコ内がtrueの場合に行う処理 }

p.072 比較演算子

・前述の2項<演算子などを比較演算子といい、値の大小関係によってbool値を返す。
・2項>演算子:左辺が右辺より大きければtrueを、でなければfalseを返す
・2項<=演算子:左辺が右辺以下ならばtrueを、でなければfalseを返す ※「< =」「=<」はエラー
・2項>=演算子:左辺が右辺以上ならばtrueを、でなければfalseを返す ※「> =」「=>」はエラー
・2項==演算子:左辺と右辺が等しければtrueを、でなければfalseを返す ※「= =」はエラー
・2項!=演算子:左辺と右辺が等しくなければtrueを、でなければfalseを返す ※「! =」はエラー
・これらはif文の条件式として用いられることが多いが、単独の演算子としても有効
・bool型の値をDebug.Logで表示すると「True」「False」となる

p.073 Chap2_3_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_3_1 : MonoBehaviour {
    void Start() {
        Debug.Log( 4 < 5 ); //trueが返されるので「True」が表示される
    }
    void Update() {
        
    }
}

p.073 Chap2_3_2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_3_2 : MonoBehaviour {
    void Start() {
        Debug.Log( 6 < 5 ); //falseが返されるので「False」が表示される
    }
    void Update() {
        
    }
}

p.074 public変数を組み合わせてみよう

・public変数の値により、TrueまたはFalseが表示されるようにできる

p.074 Chap2_3_3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_3_3 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        Debug.Log( age < 20 ); //ageの値が20未満なら「True」でなければFalse」を表示
    }
    void Update() {
        
    }
}

p.075 文字列を比較する

・C#では、2項==演算子および2項!=演算子で文字列を扱える。
※ 2項==演算子および2項!=演算子を持つ言語が多いが、文字列を扱えないことも多い(C,Java)

ミニ演習 mini075

・「p.075 文字列を比較する」の4行を実行確認してみよう
using UnityEngine;
public class mini075 : MonoBehaviour {
    void Start() {
        Debug.Log("apple" == "apple");  //True
        Debug.Log("apple" == "orange"); //False
        Debug.Log("apple" != "apple");  //False
        Debug.Log("apple" != "orange"); //True
    }
    void Update() { }
}

p.076 if文の書き方

・if文は2分岐文で、真偽値を返す値や式を条件文として用いることができる
・基本書式: if(条件文) { 条件文がtrueを返した場合に行う処理 }
・条件文がtrueを返した場合に行う処理は複数記述できるので、その範囲を「{」「}」で示す
・この範囲のことをifのブロックという
 ※Startメソッドの終わりの「}」と見前違いやすいので注意
・条件文がtrueを返した場合に行う処理はif文の内部になるので、一目でわかるように字下げ(インデント)をすると良い
 ※業務上必須であり、Visual Studioがある程度まで自動的に行ってくれる
 ※字下げの方法はチームルールによる(Tabキー、Space4個 など)

p.077 Chap2_4_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_4_1 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if ( age < 20 ) {
            Debug.Log( "未成年" ); //ageの値が20未満なら"未成年"を表示
        }
    }
    void Update() {
        
    }
}

参考:Visual Studioとインデント

・ソース全体のインデントをまとめて揃えるには、Ctrl+A、Ctrl+K、Ctrl+D
・インデントをどう行うかの設定は「ツール」「オプション」で「テキストエディタ」「C#」「タブ」で

p.78 ブロック内で複数の処理を行う

・ifブロックにおいても、ブロック内で複数の処理を行うことができる
・なお、ifブロックの中にさらにifブロックを記述することもできる

p.78 Chap2_4_2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_4_2 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log(age + "歳は"); //ageの値に文字列を連結して表示
            Debug.Log("未成年"); //"未成年"を表示
        }
    }
    void Update() {

    }
}

ブロックとフローチャート

・分岐構造を表すフローチャートでは、かならず合流を記述する(例外として合流せずに終了することもあるが)
・この合流点はプログラムではブロックの終わりの直後になる
・よって、これ以降に記述された文は、分岐してもしなくても実行対象になる

アレンジ演習:p.78 Chap2_4_2

・テキストp.079中央のソースのとおりに書き換えよう
・ageの値とは無関係に「ブロック外だよ」が表示されることを確認しよう
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_4_2 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log(age + "歳は"); //ageの値に文字列を連結して表示
            Debug.Log("未成年"); //"未成年"を表示
        }
        Debug.Log("ブロック外だよ"); //分岐とは無関係にを表示
    }
    void Update() {

    }
}

p.080 if-else構文

・ifブロックの直後に1つだけelseブロックを追加し、条件式がfalseだった場合に実行したい処理を記述できる
・よって「もしも●なら■を、でなければ▲を」という処理を記述できる
・else文において、条件文がfalseを返した場合に行う処理は複数記述できるので、その範囲を「{」「}」で示す
・if文に所属しないelse文はエラーになる。
・ifブロックの内容とelseブロックの内容のどちらかだけが実行される

p.081 Chap2_5_1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap2_5_1 : MonoBehaviour {
    public int age; //パブリック変数
    void Start() {
        if (age < 20) { //ageの値が20未満なら以下を行う
            Debug.Log("未成年"); //"未成年"を表示
        } else { //ageの値が20未満でない(20以上)なら以下を行う
            Debug.Log("成人"); //"成人"を表示
        }
    }
    void Update() {

    }
}

提出 アレンジ演習:ex082

・p.081 Chap2_5_1をアレンジして「"未成年"」または「"成人"」の前に「●歳は」を表示しよう
・また、「"未成年"」または「"成人"」の後に「"です"」を表示しよう
・それぞれの表示は1つずつの記述にすること