Boolean型と組み合わせて使うのが「&&」と「||」です。これは論理演算子の「アンド」と「オア」と呼ばれます。
論理演算子と似ているものとして「&」と「|」の記号で表されるビット演算子の「アンド」と「オア」というものがあります。
ビットとは、コンピュータで計算につかう最小単位のことで、0 か 1 かのスイッチがOFFするのか、ONするのか、の区別をつけるためのものです。Booleanも「true」と「false」の2つの状態を表すものなので、この 0 と 1 とで表されるものとほぼ共通の制御の仕方が用意されています。0 と 1 で表されるものに対する計算をするのがビット演算子、true や false で表されるBoolean型に対して計算をするのが論理演算子です。
余談ですが、1ビットとは、0 と 1 は、2つの状態を表すことができ、2ビットは2桁の0と1なので「00」「01」「10」「11」の2x2の4つの状態を表すことができます。3ビットは3桁の0と1なので、「000」「001」「010」「011」「100」「101」「110」「111」の8パターンになり、これは2の3乗です。4ビットの4桁の0と1では、2の4乗の16パターン、8ビットは0と1が8桁なので2の8乗で256パターン、というように2倍2倍に表せる状態が増えていくものです。
パソコンの32ビットとか、64ビットとかは、1回の計算で2の32乗か64乗のデータを受け取って処理して結果を返す、ということができ、その1回の計算を 1秒間で 2ギガ回 など行うことから、CPUの周波数として、2GHz の性能がある、と表現されたりします。
サンプルコード
サンプルです。番号で後述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
// -------------------- // min と max で指定した範囲の乱数を生成する const randomInt = function(min, max) { return Math.floor( Math.random() * (max + 1 - min) ) + min; }; // -------------------- // [1] var yearold = randomInt(5, 25); // 5~25までのランダムな整数値が yearold に設定されます。 if ((10 <= yearold) && (yearold < 20)) { console.log(yearold + '歳は10代です。'); } else { console.log(yearold + '歳は10代ではないです。'); } // 出力結果 // 20歳は10代ではないです。 // とか // 11歳は10代です。 // -------------------- // [2] var yearold = randomInt(5, 25); // 5~25までのランダムな整数値が yearold に設定されます。 if ((yearold === 10) || (yearold === 20) ) { console.log(yearold + '歳は区切りよいです。'); } else { console.log(yearold + '歳は区切りよくないです。'); } // 出力結果 // 16歳は区切りよくないです。 // とか // 10歳は区切りよいです。 // -------------------- // [3] const compare1 = Boolean(randomInt(0, 1)); // true か false が入る const compare2 = Boolean(randomInt(0, 1)); // true か false が入る if (compare1 && compare2) { console.log(`${compare1} ${compare2} どちらもです。1`); } if (compare1) { if (compare2) { console.log(`${compare1} ${compare2} どちらもです。2`); } } // 出力結果 // true true どちらもです。1 // true true どちらもです。2 // 出力されるときは、必ず両方とも実行される。 // -------------------- // [4] if (compare1 || compare2) { console.log(`${compare1} ${compare2} どちらかです。1`); } if (compare1) { console.log(`${compare1} ${compare2} どちらかです。2`); } else if (compare2) { console.log(`${compare1} ${compare2} どちらかです。2`); } // 出力結果 // true true どちらかです。1 // true true どちらかです。2 // 出力されるときは、必ず両方とも実行される。 |
「and」「A そして B」「A かつ B」
0 and 0 → 0
0 and 1 → 0
1 and 1 → 0
1 and 1 → 1
2つの値を比較して、両方とも1の場合だけ、1になります。
これは、真偽値として考えると
偽 そして 偽 は 偽
偽 そして 真 は 偽
真 そして 偽 は 偽
真 そして 真 は 真
となります。
例えがないと、わけわからないですよね。
例えば、年齢が変数に入っているとして、年齢によって条件を決めるときに「and」を使ってみたソースコードが[1]の部分になります。
「10歳以上 かつ 20歳未満」なら、10代の人と判断する、というように複数の条件を組み合わせています。and は JavaScriptでは「&&」で表現されていて、「かつ」や「そして」の意味になります。
「or」「A または B」「A もしくは B」
0 or 0 → 0
0 or 1 → 1
1 or 1 → 1
1 or 1 → 1
2つの値を比較して、どちらかが、1の場合に、1になります。
これは、真偽値として考えると
偽 または 偽 は 偽
偽 または 真 は 真
真 または 偽 は 真
真 または 真 は 真
となります。
こちらの例は[2]のソースコードになります。
「10歳 もしくは 20歳」なら、区切りよい年齢と判断する、というように複数の条件を組み合わせています。or は JavaScriptでは「||」で表現されていて、「または」や「もしくは」の意味になります。
ifの書き方でも同じように処理分岐できる
[3]のコードは「&&」で書かれたものと、if と if の入れ子になった連続した書き方とで、同じ動きをする書き方です。
[4]のコードは「||」で書かれたものと、if else if とで連続した書き方とで、同じ動きをさせています。
仕事の実際の現場というか、よいプログラムを作るときには、このサンプルコードのような条件が2つなシンプルなものではなく、もっと多くの判定をする必要があります。
条件によって処理を分岐するときに、この「&&」も「||」も、if の連続も、else との組み合わせも、全てを使って読みやすいコードを書くことができることが大切です。
処理分岐はプログラムの基本中の基本で、仕組みはシンプルなものなので、理解して使いこなしていってください。