講義メモ

・p.54「入力結果をちょっと加工して表示する」から

提出フォロー:アレンジ演習: p.46 chap1_8_2 続き2

・税率を100分率で入力できるようにしよう
・例えば、8と入力したら価格を1.08倍した結果になること
・ヒント: 売値=価格×(100+税率)÷100

作成例

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

public class Chap1_8_2 : MonoBehaviour {
    public double kakaku = 100, rate; //パブリックな実数型変数の初期化と宣言
    void Start() {
        double urine = kakaku * (100 + rate) / 100; //実数型変数の計算式による初期化
        Debug.Log(urine); //実数型変数の値を出力
    }
    void Update() {
    }
}

補足:計算順序と誤差

・基本的に誤差が出やすい除算は最後に行うと良い
・先に誤差が出た状態で乗算を行うと誤差が増えてしまう
・また、整数演算では先に除算を行うと計算結果が大きく損なわれることがある(後述)

p.54 入力結果をちょっと加工して表示する

・C#では演算子に複数の作用を持たせることができる。
・これをオーバーロード(多重定義)という
・どの作用が行われるかは演算の対象の型によって決まる
・2項+演算子の場合:
 ① 双方が加算可能(数値)なら加算
 ② どちらかまたは両方が文字列なら連結
 ③ ①でも②でもなければエラー(ただし、プログラムで追加定義が可能)
・複数の2項+演算子を使った式の場合、途中段階でどの型になるかで動作が変わるので注意

p.54 Chap1_10_2

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

public class Chap1_10_2 : MonoBehaviour {
    public string text; //パブリック変数の宣言
    void Start() {
        Debug.Log( "入力は" + text ); //文字列変数の値を連結して出力
    }
    void Update() {
        
    }
}

アレンジ演習:Chap1_10_2 ①

・2項+演算子のどちらかが文字列なら連結であることを確認しよう
① 文字列+実数 例:"円周率は" + 3.14 を表示
② 実数+文字列 例: double pi = 3.14; pi + "が円周率" を表示

作成例

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

public class Chap1_10_2 : MonoBehaviour {
    public string text; //パブリック変数の宣言
    void Start() {
        Debug.Log( "入力は" + text ); //文字列変数の値を連結して出力
        Debug.Log( "円周率は" + 3.14 ); //文字列+実数で連結して出力
        double pi = 3.14; //実数型変数を初期化
        Debug.Log( pi + "が円周率" ); //実数変数+文字列で連結して出力
    }
    void Update() {
        
    }
}

アレンジ演習:Chap1_10_2 ②

・複数の2項+演算子を使った式の場合、途中段階でどの型になるかで動作が変わることを確認しよう
① 実数+実数+文字列は、実数の和と文字列の連結 例:1.1 + 2.04 + "は円周率" を表示
② 実数+文字列+実数は、実数と文字列の連結に実数を連結 例: 1.5 + "個の重さは" + 2.5 を表示
③ よって、文字列+実数+実数は、文字列と実数の連結に実数を連結してしまう。カッコを用いて優先順位を調整することで)
 double x = 1.5, y = 2.2; 
 について「和は3.7」と表示する処理を追加しよう。

作成例

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

public class Chap1_10_2 : MonoBehaviour {
    public string text; //パブリック変数の宣言
    void Start() {
        Debug.Log( "入力は" + text ); //文字列変数の値を連結して出力
        Debug.Log( "円周率は" + 3.14 ); //文字列+実数で連結して出力
        double pi = 3.14; //実数型変数を初期化
        Debug.Log( pi + "が円周率" ); //実数変数+文字列で連結して出力
        Debug.Log( 1.1 + 2.04 + "は円周率" ); //実数の和と文字列の連結
        Debug.Log( 1.5 + "個の重さは" + 2.5 ); //実数と文字列の連結に実数を連結
        double x = 1.5, y = 2.2; //実数型変数を初期化
        Debug.Log( "和は" + (x + y) ); //加算後の実数を文字列に連結
    }
    void Update() {
        
    }
}

アレンジ演習:p.46/47 Chap1_8_2/3をベースに

・「●円で税率●%なので●円」と表示しよう

作成例

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

public class Chap1_8_2 : MonoBehaviour {
    public double kakaku = 100, rate; //パブリックな実数型変数の初期化と宣言
    void Start() {
        double urine = kakaku * (100 + rate) / 100; //実数型変数の計算式による初期化
        Debug.Log(kakaku + "円で税率" + rate + "%なので" + urine + "円"); //【変更】連結出力
    }
    void Update() {
    }
}

作成例:別解

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

public class Chap1_8_2 : MonoBehaviour {
    public double kakaku = 100, rate; //パブリックな実数型変数の初期化と宣言
    void Start() {
        double urine = kakaku * (100 + rate) / 100; //実数型変数の計算式による初期化
        string why = kakaku + "円で税率" + rate + "%なので"; //【追加】理由の文字列
        Debug.Log(why + urine + "円"); //【変更】連結出力
    }
    void Update() {
    }
}

参考: Unity UIについて

・通常のアプリケーションにおいて、実行中に利用者(プレイヤー)が値を与えるには、そのためのユーザインタフェース(UI)が必要
・特にグラフィック系のアプリでは、キーボードを利用して入力するのは不適切な場合が多いし、入力のチェックの問題もある
・よって、専用のユーザインタフェースツールを用いて、アプリの作りに合わせたUI作り込むのが一般的
・Unityの場合、Unityが用意しているUnity UIを用いることができる
 https://docs.unity3d.com/ja/2022.3/Manual/UIInteractionComponents.html

今週の話題

販売本数ランキング 今回トップも「スーパーマリオブラザーズ ワンダー(Switch)」GO!
カプコンはデジタル好調で増収増益、ただし『エグゾプライマル』で完全新作の難しさ露呈か【ゲーム企業の決算を読む】GO!
PS5新モデルが本日発売! 小型化されディスクドライブも着脱式に GO!
新発表のOLED版Steam Deckはあくまで「顧客意見を元にしたアップグレード」―次世代「Steam Deck 2」はまだ数年以上先、Valve改めて姿勢鮮明に GO!
「ゲーム業界と他業界のエンジニアは何が違う?」クリーク・アンド・リバーのエンジニア座談会11月16日開催 GO!
8年目を迎えるニンテンドースイッチ、これまでのライフサイクルに囚われることなく「新作タイトルの展開を続ける」GO!
『ティアキン』2,000万本秒読み、『マリカ8DX』や『スマブラSP』などミリオンタイトルが16本も…任天堂が24年3月期 第2四半期の決算資料を公開 GO!

【決算】コロプラの23年9月期決算は43%減益―『白猫プロジェクト』など主要IP盛り上げも売上は微減、新作の広告宣伝費も影響 GO!
今後ルール変更されても「遡及適用」もう行いません―Unity、利用規約更新で開発者の信頼回復図る GO!
人気タイトル独占や無料配布施策行うも「Epic Gamesストア」未だ利益出せず…立ち上げから約5年―しかし目標は依然として「成長」GO!

前回のコメント

・変数の型や値の書く必要がないものまで書いてしまうことが多かったのでもう少し頭を柔らかく使えるようにしていきたいと思いました。

 C系言語は初期化と代入が似すぎているので面倒ですが、処理内容は大きく異なります。
 全く違う構文だととらえると良さそうです。

・変数周りの順序やルールなどが様々あってスラスラと覚えるのは大変そうだけれども、ペース的に全然ついては行けている上、面白いので頑張っていきたいです
・授業のペースはちょうどよかったです。

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

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

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

講義メモ 後半

p.48 変数の命名ルール

・必須ルール(守らないと実行できない)とチームルール(エラーにはならないが推奨されない、現場で認められない)がある
・必須ルール
① 大文字、小文字、数字、_、2バイト文字からなる
② ただし、先頭文字は数字禁止
③ 予約語(using、public、classなど)と重複は禁止
・主なチームルール
① 2バイト文字は推奨されない
② 大文字小文字の使い分けルールに従う(例:変数名は小文字 など)
③ 特殊な場合を除いてアンダーバーは使わない。特に先頭には置かない
④ 小文字にすると予約語と一致する単語は使わない(例:Using、PUBLICなど)
⑤ 1文字の変数名は特別な意味を持つ変数には使わない。使い捨ての場合はOK(例:i,j,kは繰返しカウンタ専用)

p.50 スペースの入れどころ

・必須スペース(守らないと実行できない)と、推奨スペース(エラーにはならないが推奨される)がある
・予約語の前後のスペースは必須。
・演算子の前後のスペースは任意で、チームルールによって推奨されることが多い
 例:「*」はC/C++でポインタを扱う場合(*C)と掛け算(A * B)で用いるので、見間違いやすい。
・また「{」「}」の前後に空白や改行が推奨される場合が多い

補足:変数名の長さ

・512文字程度が上限
・C言語では「型が異なるものには異なる名前を付ける」原則があるので、名前が長くなりやすい
・しかし、C#/C++/Javaなどでは(後述するポリモフィズムにより)「型にかかわらず、同じ意味のものは同じ
 名前にする」が原則なので、名前を長くすることは少ない。

p.52 パブリック変数とは

・プログラムは部品であるコンポーネント(モジュール)の組み合わせで実現されることが多い
・あるいは、複数のサブプログラムに分割してグループ開発することが多い
・複数の要素の間でデータを共有し受け渡す方法の一つがパブリック変数で「どこからも見える」存在になる
 ※ 見えてしまう、壊されやすいというデメリットもある
・Unityのスクリプトでは、クラスの先頭でパブリック変数を宣言することで「どこからも見える」変数になる
・宣言書式: public 型 変数名; //初期化も可能、複数記述も可能
 ※ 実務ではテスト時のみ用い、完成時には残さないことが多い
・なお、Unityのスクリプトでclassの前にもpublicがあるのは、Unityシステムから見える必要があるから

p.53 Chap1_10_1

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

public class Chap1_10_1 : MonoBehaviour {
    public string text; //パブリック変数の宣言
    void Start() {
        Debug.Log( text ); //文字列変数の値を出力
    }
    void Update() {
        
    }
}

補足:Inspectorのパブリック変数に対する動作

・スクリプトが保存されると、Unity側で解析し、パブリック変数があればInspectorに入力欄が用意される
・ユーザがInspectorから入力した内容は保持され、最優先で利用される
・よって、プログラム側で初期値を設定しても、入力値によって上書きされる

アレンジ演習:Chap1_10_1

・パブリック変数の宣言を初期化にして値を設定する
・実行前にInspectorで値を入力してから実行し、結果を確認しよう
・Inspectorで値を消しても、長さゼロの文字列が渡されてしまうことを確認しよう
・変数名を変更すると、初回扱いになり、初期値がInspectorに表示されることを確認しよう
・なお、プログラム内でパブリック変数に値を代入でき、Inspectorの値も書き変わる
・ただし、スクリプトを再保存すると、Inspectorの値は入力値に戻されてしまうことを確認しよう

作成例

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

public class Chap1_10_1 : MonoBehaviour {
    public string text2 = "ヴェルグリンド"; //パブリック変数の初期化
    void Start() {
        text2 = "セイラ";
        Debug.Log( text2 ); //文字列変数の値を出力
    }
    void Update() {
        
    }
}

アレンジ演習: p.46 chap1_8_2

・変数kakakuをパブリック変数にしよう
・そして、Inspectorで値を入力して動作を確認しよう

作成例

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

public class Chap1_8_2 : MonoBehaviour {
    public double kakaku = 100; //パブリックな実数型変数の初期化
    void Start() {
        double urine = kakaku * 1.08; //実数型変数の計算式による初期化
        Debug.Log(urine); //実数型変数の値を出力
    }
    void Update() {
    }
}

アレンジ演習: p.46 chap1_8_2 続き

・実数1.08をパブリック変数taxにしよう
・そして、Inspectorで2値を入力して動作を確認しよう

作成例

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

public class Chap1_8_2 : MonoBehaviour {
    public double kakaku = 100, tax; //パブリックな実数型変数の初期化と宣言
    void Start() {
        double urine = kakaku * tax; //実数型変数の計算式による初期化
        Debug.Log(urine); //実数型変数の値を出力
    }
    void Update() {
    }
}

提出:アレンジ演習: p.46 chap1_8_2 続き2

・税率を100分率で入力できるようにしよう
・例えば、8と入力したら価格を1.08倍した結果になること
・ヒント: 売値=価格×(100+税率)÷100

講義メモ

・p.44「変数とは?」から

p.44 変数とは?

・変数:記憶域(メモリ)を確保して名前をつけたもの
・型:値や変数の属性で、変数の確保においてはデータ長と特性(整数、実数、文字、文字列など)を決める
・C#では変数の利用前に宣言が必要で、この時に型を指定する
・宣言の書式: データ型 変数名; // 例 string name;
・同じ型の変数であればコンマ繋ぎでまとめて宣言可 例:string name, subname;
・string:文字列型で、0文字以上の文字列を扱える。C#では2バイト文字もOK
・代入:変数に値を格納すること。上書きになる。2項=演算子で行うが元の記号は「←」
 例: string name; name = "ヴェルドラ"; //文字列変数nameの宣言と値の代入
・初期化:宣言と同時に値(初期値)を代入すること
・初期化の書式: データ型 変数名 = 値; // 例 string name = "ヴェルドラ";
 ※ 特に不必要な場合を除き、なんらかの初期化が推奨されることが多い
・なお、複数の同じ型の変数を同時に初期化できる。あるいは一部を初期化できる
 例: string name = "ヴェルドラ", subname;

p.45 変数を作成してその値を代入する

・値が代入されている変数を式や処理に渡すと、その値が用いられる
 例: string name = "ヴェルドラ"; Debug.Log(name); //"ヴェルドラ"がLogに渡される
・なお、変数を代入の右辺に置くことで、右辺の変数の値を左辺の変数に代入できる

p.45 Chap1_8_1

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

public class Chap1_8_1 : MonoBehaviour {
    void Start() {
        string text = "ハロー!"; //文字列型変数の初期化
        Debug.Log( text ); //文字列型変数の値を出力
    }
    void Update() {
        
    }
}

アレンジ演習:Chap1_8_1

・textと一緒に変数nameも適当な名前で初期化しよう
・textの値を表示した後で、nameの値をtextに代入しよう
・textの値を再度表示し、値が変わっていることを確認しよう

作成例

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

public class Chap1_8_1 : MonoBehaviour {
    void Start() {
        string text = "ハロー!", name = "シャア"; //文字列型変数の初期化
        Debug.Log( text ); //文字列型変数の値を出力
        text = name; //変数nameの値を変数textに代入(上書きされる)
        Debug.Log( text ); //文字列型変数の値を出力
    }
    void Update() {
        
    }
}

p.46 変数を使うメリットは?

・変数は式の中でも使えるので、値を使いまわしたり再利用する場合に必要(例:税率)
・double型:実数(小数点のある値)用のデータ型で、倍精度浮動小数点数の略が由来。非常に大きい範囲の値を
 扱えるので、数値の扱いの標準になっている。
 ※ コンピュータ内部では2進数なので、10進数の実数は誤差が付き物なので注意
・double型には整数も代入/初期化でき、内部的に実数扱いになる
 例: double kakaku = 100; //内部的に100.0で初期化
・2項*演算子で実数どうしの掛け算が可能で結果も実数になる
・初期化の初期値は式でもOKで、初期化済の他の変数を使う式もOK
 例: double urine = kakaku * 1.08; //価格の値×1.08の計算結果で初期化
 この式の動作順は ①変数urineの宣言 ②変数kakakuの値を得る ③計算 ④計算結果の代入
・なお、Debug.Logメソッドは実数型にも対応しており、小数点以下が0の場合「.0」を省略する

p.46 Chap1_8_2

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

public class Chap1_8_2 : MonoBehaviour {
    void Start() {
        double kakaku = 100; //実数型変数の初期化
        double urine = kakaku * 1.08; //実数型変数の計算式による初期化
        Debug.Log( urine ); //実数型変数の値を出力(内部的には108.0)
    }
    void Update() {
        
    }
}

p.46 変数を使うメリットは?(つづき)


・float型:実数(小数点のある値)用のデータ型で、単精度浮動小数点数の略が由来。double型より狭い範囲の値を
 扱うが、データ量が半分で済む。ただし、誤差が大きい。
※ Unityではfloat型の出番が多い
・変数に格納されている値を得ることを参照ともいう
※ 文字列型変数では、変数とは別に文字列が格納され、その位置情報が変数に格納される。この情報のことも参照
 (リファレンス)という

アレンジ演習:Chap1_8_2⇒1_8_3

・定数1.08も変数taxに格納して用いるようにしよう

作成例

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

public class Chap1_8_2 : MonoBehaviour {
    void Start() {
        double kakaku = 150, tax = 1.08; //実数型変数の初期化
        double urine = kakaku * tax; //実数型変数の計算式による初期化
        Debug.Log( urine ); //実数型変数の値を出力(内部的には162.0)
    }
    void Update() {
        
    }
}

参考: 実数型の精度の違いについて

・double型の変数を精度を超える値で初期化すると、ある程度の桁数で打ち切られた結果になる
例: double pi = 3.141592653589793238462643; Debug.Log(pi);
 ⇒ 3.14159265358979 となる
・float型の変数で上記のことを行うとエラーになる。
・これは実数リテラル(実数をそのままプログラムに記述したもの)の型が自動的にdoubleになるから
・これを防ぐには、実数リテラルの末尾にFまたはfをつけてfloat型扱いにすれば良い
例: float fi = 3.141592653589793238462643F; Debug.Log(fi);
 ⇒ 3.141593 となる
・float型の値や変数はdouble型変数に代入できるが、逆はエラーになる
例: double pi = 3.141592653589793238462643F; //OK
例: float fi = pi; //エラー
・整数を含む式の場合、double型があればdouble型に変換されてから計算される
・整数を含む式の場合、double型がなく、float型があればfloat型に変換されてから計算される
例: float fi = 3.14F * 10 * 10; //半径10の円の面積

今週の話題

販売本数ランキング 今回トップも「スーパーマリオブラザーズ ワンダー(Switch)」GO!
12月17日開催「Indie Developers Conference 2023」チケット販売開始―インディーゲーム開発にまつわる様々なノウハウを共有 GO!
Gaijin社の新たなる試み?11周年迎えた『War Thunder』などで使用される独自のゲームエンジン「DagorEngine」がオープンソースに GO!
日テレグループYouTube MCN「C+」、カプコンとの著作物使用許諾契約書を締結―ゲーム利用のコンテンツ投稿/収益化が可能に GO!

サイバーエージェント通期業績、大幅減益―『ウマ娘』の反動大きく GO!
人間が苦手なステージはAIも苦手―「AAAゲームバランス調整の次元の呪い」セッションレポート【CEDEC2023】GO!
『テラビット』へ集まった批判―サイバーステップ2割超の減収、MSワラントによる調達へ GO!
「あおぎり高校」が誹謗中傷対策委員会を設置…「ぶいすぽっ!」運営との連携で誹謗中傷への対策、抑止、根絶に挑む GO!

講義メモ 後半

p.37 整数と実数

・コンピュータ内では整数と実数は別扱いになっている
・小数点がない数字列(先頭のみ「-」可能)は整数とみなされる
・小数点が1つだけある数字列(先頭のみ「-」可能)は実数とみなされる
・加減乗算では、左右どちらかまたは両方が実数だと結果は実数になる(計算手順は同じ)
・除算では、左右どちらかまたは両方が実数だと実数計算に、でなければ整数計算になり小数点以下切り捨ての整数になる
・剰余算における実数の扱いは言語や処理系で異なるが、C#では実数を含むことが可能
 ※誤差が出ることが多いので扱いは注意(誤差を避けるには整数化して行うと良い)

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

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 ); //式2+0.5の評価(実数加算結果)を出力
    }
    void Update() {
        
    }
}

アレンジ演習:Chap1_6_3

・実数と実数の加算で小数点以下がゼロの場合の結果を確認しよう
・整数と実数の剰余算の結果を確認しよう

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

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 );    //整数と実数の加算結果を出力→2.5
        Debug.Log( 2.5 + 0.5 );  //実数と実数の加算結果を出力→3(表示で整数化)
        Debug.Log( 10 % 0.3 );   //整数と実数の剰余算結果を出力→0.1
        Debug.Log( 10.3 % 2 );   //実数と整数の剰余算結果を出力→0.3000…01
        Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
    }
    void Update() {
        
    }
}

p.37 補足:ゼロ除算

・0で割った場合の結果は言語や処理系に依存する
・C#の場合、整数を明示的に0で割るとコンパイルエラーとなり実行できない
・なお、右辺が式であっても評価結果が明示的に0になる場合も同様
・実数を0で割ったり、実数の0.0で割ることは可能だが…
・また、負の実数を0で割ると…
・ちなみに、後述する変数の利用時には結果が異なる

アレンジ演習:Chap1_6_3

・実数を0で割ったり、実数の0.0で割った場合の結果を確認しよう
・負の実数を0で割った場合の結果を確認しよう

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

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 );    //整数と実数の加算結果を出力→2.5
        Debug.Log( 2.5 + 0.5 );  //実数と実数の加算結果を出力→3(表示で整数化)
        Debug.Log( 10 % 0.3 );   //整数と実数の剰余算結果を出力→0.1
        Debug.Log( 10.3 % 2 );   //実数と整数の剰余算結果を出力→0.3000…01
        Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
        Debug.Log( 10.0 / 0 );   //実数をゼロで割った結果を出力→ Infinity
        Debug.Log( 10 / 0.0 );   //ゼロを実数で割った結果を出力→ Infinity
        Debug.Log( -1 / 0.0 );   //負の実数をゼロで割った結果を出力→ -Infinity
    }
    void Update() {
        
    }
}

p.38 長い数式を入力する

・演算子には優先順位があるが、これを暗記するのではなく、左から右への順にならない場合はカッコで示すことが
 推奨されている
・例:加減算より乗除算が優先なので 1 + 2 * 3 → 7 だが 1 + (2 * 3) とするのが望ましい
・剰余残は除算と同じ優先度だが間違いやすいので注意

p.39 演算子の優先順位一覧

・f(x):メソッドの呼び出しのことで、例えば Debug.Log(1) が該当し、優先順位1位だが、カッコ内に式がある
 場合は、その式の方が優先
・x++:p.105参照。インクリメントと呼び「1加算した結果にする」
・x--:p.108参照。デクリメントと呼び「1減算した結果にする」
・-x:値を負の数にする。実は「-5」は整数5の前に単項-演算子をつけて負の数にしたもの
・++x:前置増分演算子といい、インクリメントの一種で「まず1加算してから」
・--x:前置減分演算子といい、デクリメントの一種で「まず1減算してから」
・(T)x:p.57参照。キャスト演算子といい、例えば整数を実数に変換する場合などに用いる
・x << y:左シフト演算子といい。xを2進数にしてy桁分だけ左にずらし、空きを0で埋めた結果を返す。
 1左シフトすると2倍になるので2のべき乗倍の高速化に用いる。
・x >> y:右シフト演算子といい。xを2進数にしてy桁分だけ右にずらし、空きを0で埋めた結果を返す。
 1右シフトすると半分になるので2のべき乗分の1の高速化に用いる。
・論理AND/OR/XOR:p.56で説明するbool型に用いる論理演算子。
 ※ C言語では0/非0で論理演算を代替できるが、C#では禁止になっている

アレンジ演習:Chap1_6_3

・上辺が10、下辺が21、高さが3の台形の面積を実数で出力しよう

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

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 );    //整数と実数の加算結果を出力→2.5
        Debug.Log( 2.5 + 0.5 );  //実数と実数の加算結果を出力→3(表示で整数化)
        Debug.Log( 10 % 0.3 );   //整数と実数の剰余算結果を出力→0.1
        Debug.Log( 10.3 % 2 );   //実数と整数の剰余算結果を出力→0.3000…01
        Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
        Debug.Log( 10.0 / 0 );   //実数をゼロで割った結果を出力→ Infinity
        Debug.Log( 10 / 0.0 );   //ゼロを実数で割った結果を出力→ Infinity
        Debug.Log( -1 / 0.0 );   //負の実数をゼロで割った結果を出力→ -Infinity
        Debug.Log( (10 + 21) * 3 / 2.0 ); //上辺10下辺21高さ3の台形の面積を実数で
    }
    void Update() {
        
    }
}

p.40 同じ優先順位の演算子を組み合わせた式

・複数の演算子を含む式は、演算子が(基本的に左から)1つずつ評価され、途中経過の値がその型に応じた形で
 保持される
・この時の型を意識して式を書く必要がある
・例「2 + 10.5 + 5.5」は整数+実数で実数の12.5が途中経過になる
・例「2.5 + 10.5 + 5.5」は実数+実数で実数の13.0が途中経過になる(整数になるわけではない)

p.41 優先順位が異なる演算子を組み合わせた式

・優先順位に応じた順序で演算子が1つずつ評価され、途中経過の値がその型に応じた形で保持される

p.42 カッコの中にカッコが入れ子になった式

・優先順位を示すカッコはいくつでも何重にでも指定可能
・見づらくなる場合は、式を分割するなどの工夫が望ましい(変数を用いるので後述)

p.43 負の数を表す「-」

・演算子は対象の数により単項演算子、2項演算子、3項演算子があり、同じ記号で意味が異なるものや、
 対象の型により動作が異なるものがある
・2項-演算子は「左辺から右辺を引いた結果を返す」例:3-4 ⇒ -1を返す
・単項-演算子は「符号を反転した結果を返す」例:-(-4) ⇒ 4を返す
・なお、単項+演算子は実質的に何もしない

提出:アレンジ演習:Chap1_6_3