p.088 複数の比較式を組み合わせる:論理演算子(2項||演算子)
・2項||演算子:左辺と右辺がbool型の時、どちらか片方か両方がtrueならtrueを、でなければfalseを返す
・つまり、どちらもfalseなfalseを、でなければtrueを返すので、2項&&演算子の逆の忌になる
・よって「オア」「または」とも呼ばれる
・ifの条件式に用いると「if(条件① || 条件②) { ①②の片方か両方がtrueの時の処理 }」とできるので、2条件の「または」に該当する
・なお、この場合、①②が共にfalseの場合、実行されない
・よって、2項||演算子は値の範囲外チェックに便利:
「if(変数 < 下限 || 変数 > 上限) { 変数の値が範囲外の時の処理 }」
・ただし、条件①と②が同時に成立する場合、想定外の動作になることに注意
例: if(a > 0 || a < 10) {ここは常に実行される}
アレンジ演習:p.090 Chap2_7_2
・ageが負の数の場合は「負の数は対象外」と表示しよう ⇒先にチェックしないと「幼児」になってしまうので注意
作成例
//アレンジ演習:p.089 Chap2_7_2
using UnityEngine;
public class Chap2_7_2 : MonoBehaviour
{
public int age;
void Start() {
if(age < 0) { //ageの値が0未満?
Debug.Log("負の数は対象外");
} else if(age <= 5 || age >= 65) { //ではなくてageの値が5以下または65以下?
Debug.Log("幼児と高齢者");
}
}
}
補足:複数の2項||演算子
・2つ以上の2項||演算子を並べて3つ以上の条件式を記述できる
例: if (a == 0 || b == 0 || c == 0) {a,b,cどれかが0の場合の処理}
・なお、このような記述をすると、最初の方の条件式がtrueになると、後続の条件式は
(trueになってもfalseになっても全体はtrue確定なので)評価されず、誤りが発見されづらいので注意
・つまり、2項&&演算子と同様に短絡評価が起こる
・2項&&演算子の安全性の向上の例と同様のことができる
例: if (a == 0 || 5 / a > 2) {…} //aが0か、または、5/aが2超?
補足:2項&&演算子と2項||演算子の併用と優先度
・2項&&演算子と2項||演算子の併用が可能だが、2項&&演算子が優先なので注意 ・例: if (a == 0 || b == 0 && c == 0) //先にbとcが共に0かを評価 ※チームルールによってはカッコをつけることを義務とする場合がある 例: if (a == 0 || (b == 0 && c == 0)) //先にbとcが共に0かを評価
p.088 論理演算子(単項!演算子)
・右辺がbool型であれば、その値をtrue⇔false反転した結果を返す
※変数値を書き換えるわけではないので注意(書き換えるには代入が必要)
例: bool a = true, b = !a; //bはfalseになるが、aはtrueのまま
例: bool a = true; a = !a; //aはtrueからfalseになる
・単項!演算子は、bool型の値を返すメソッドを用いて得られる結果を反転したいときに便利
例:Mathf.IsPowerOfTwo(整数)は、整数が2のべき乗値ならtrueを返す
よって、if(!Mathf.IsPowerOfTwo(整数)) { 整数が2のべき乗ではないときの処理 }
提出:アレンジ演習:p.091 Chap2_7_3
・「9」をパブリック変数で与えるようにしよう ・変数値を用いて「●は2のべき乗ではない」と表示するようにしよう ・パブリック変数が負の数の場合の動作を確認しよう