・p.070「Chapter 2のためのゲームオブジェクトの追加」から
p.070 空のゲームオブジェクトを追加する
・「create」をクリック ⇒ 左上の「+」をクリック
p.072 比較演算子
・p.69の例に登場した「age < 20」の「<」は2項<演算子といい、左辺が所定の比較方法により右辺より小さいとなる場合にtrueを、 でなければfalseを返すもので比較演算子(関係演算子)の一つ ・比較演算子(関係演算子)は2項<(小なり),>(大なり),<=(以下),>=(以上),==(等価),!=(非等価)演算子の6種。 ・「<=」「>=」「!=」は「=」が右側。「==」を含めて間の空白は不可 ・比較演算子が返すbool値(true/false)をDebug.LogするとTrue/Falseとなる。
アレンジ演習:p.073 Chap2_3_1.cs
・Chap2_3_2.csも含めよう ・2項<=(以下),>=(以上),==(等価),!=(非等価)演算子も試そう(エラーも) ⇒「< =」とすると「=は無効です」エラーになる ⇒「=>」とすると「構文エラーです。','が必要です」になる ⇒「=!」とすると左辺・右辺の値により異なるエラーになるので注意
作成例
using UnityEngine;
public class chap2_3_1 : MonoBehaviour {
void Start() {
Debug.Log(4 < 5); //True
Debug.Log(6 < 5); //False
Debug.Log(4 <= 5); //True
Debug.Log(4 >= 5); //False
Debug.Log(4 == 5); //False
Debug.Log(6 != 5); //True
}
}
補足:整数と実数の比較演算子による処理
・整数と実数を比較演算子のオペランドにした場合、実数に揃えた結果で比較される ・例えば、整数5と実数5.0は厳密には等しくないが、整数5を実数5.0にしてから比較するので等価になる ・整数型、実数型などで型が異なる変数の場合も基本的に同様
アレンジ演習:p.073 Chap2_3_1.cs:つづき
・各種の整数型、実数型、文字型、論理型の変数を交えて、比較可能か確認しよう ⇒整数型、実数型、文字型の混在による比較は可能(型を揃えてから行われる)。 ただし、文字型と整数型・実数型の比較は文字コードによって行われる よって、文字'4'と整数4は等しくない。 論理型と、論理型以外の型の混在による比較は文法エラーになる。
作成例
using UnityEngine;
public class chap2_3_1 : MonoBehaviour {
void Start() {
Debug.Log(4 < 5); //True
Debug.Log(6 < 5); //False
Debug.Log(4 <= 5); //True
Debug.Log(4 >= 5); //False
Debug.Log(4 == 5); //False
Debug.Log(6 != 5); //True
int i = 5; uint u = 5U; float f = 5.0f; double d = 5.0; char c = '5';
Debug.Log("5 == 5U : " + (i == u)); //True(longで比較)
Debug.Log("5 == 5.0F : " + (i == f)); //True(floatで比較)
Debug.Log("5 == 5.0 : " + (i == d)); //True(doubleで比較)
Debug.Log("5 == '5' : " + (i == c)); //False(文字コードをintで比較)
Debug.Log("65 == 'A' : " + (65 == 'A')); //True(同上,'A'はコード65)
bool b = false;
//Debug.Log("5 == false : " + (i == b)); //文法エラー
//Debug.Log("'5'== false : " + (c == b)); //文法エラー
}
}
p.074 パブリック変数を組み合わせてみよう
・変数値をパブリック変数で与えることで、比較結果が変わることを確認できる
アレンジ演習:p.074 Chap2_3_3.cs
・実数値や文字もパブリック変数で与えて、これらを用いる比較演算を行い、動作を確認しよう
作成例
//アレンジ演習:p.074 Chap2_3_3.cs
using UnityEngine;
public class chap2_3_3 : MonoBehaviour {
public int age;
public double aged;
public char agec;
void Start() {
Debug.Log(age < 20); //整数比較
Debug.Log(aged < 20); //20.0にして実数比較
Debug.Log(agec < 20); //文字コードで比較
}
}
p.075 文字列を比較する
・文字列どうしの等価比較(==、!=)は文字列として全く同じかどうかの比較になる ・大文字小文字、1バイト文字2バイト文字は別の文字として扱われる
p.075 mini075.cs 文字列を比較する
・文字列どうしの大小比較がどうなるか試そう ⇒文法エラーになる ・文字列型と他の型との比較演算ができるかどうか試そう ⇒文法エラーになる
作成例
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
//Debug.Log("apple" < "orange"); //文法エラーになる
//Debug.Log("apple" == 0); //文法エラーになる
//Debug.Log("apple" == 'a'); //文法エラーになる
}
}
補足: 比較の左辺と右辺の使い分けについて
・変数とリテラルを比較する場合「変数 演算子 リテラル」でも「リテラル 演算子 変数」でも問題ない ・しかし、チームルールによっては「変数 演算子 リテラル」とすることを推奨している場合がある 例:「6 < a」は「a > 6」にする ・なお、複数の比較演算子の連続記述はエラーになる 例:「6 < a < 10」//文法エラー ・ちなみに「6 == a == true」であれば先に「6 == a」が評価されてbool値が返るのでエラーにならない