IORI online School

JavaScript、html、css の無料学習サイト

【JavaScript 初心者講座】論理演算子の学習

[JavaScript 初心者講座]論理演算子の学習

本講座では、論理演算子を学習する。 「論理」というと難しく聞こえるが、論理的に考えれば比較的簡単ではある。 本講座の最終目標は「20未満の数字の中で、3と2の両方で割り切れる数字を探すプログラムを書く」という事である。 そうである。「6と12と18」である。暗算である。 しかしこの計算をプログラミングする。楽しみだ。

論理演算子 「AかつB」の「かつ」と 「AまたはB」の「または」が論理演算子

論理演算子は、「かつ」や「または」である。 これをプログラミングする。

&&演算子

論理演算子「かつ」のサンプルをみる。

001<script>
002
003const a = 15 ;
004const b = 5;
005
006if ( a > 10 && b > 10 ) {
007
008  alert ( "OK" ) ;
009  
010} else {
011
012  alert ( "NG" ) ;
013}
014</script>

プログラムを実行すると、「NG」と表示する。

プログラムを解説する。3行目と4行目で変数a、bを宣言して(読み取り専用変数を、今後「変数」と表記する)、 それぞれ「15」と「5」を代入する。 6行目でif文を実行する。 if文の条件式に、論理演算子「&&」を利用している。

AかつB A && B

「AかつB」をプログラムで書くと、「A && B」になる。

AかつB 「AとBがどちらもtrueである」という条件式

「AかつB」は「AとBがどちらも真である」という条件式である。 もし「A」と「B」のうち、どちらかが「真でない」場合、「AかつB」は「真でない」。 つまり、falseとなる。

003const a = 15 ;
004const b = 5;
005
006if ( a > 10 && b > 10 ) {

6行目を詳しく見る。aの値は15である。

003const a = 15 ;
004const b = 5;
005
006if ( 15 > 10 && b > 10 ) {

このようになる。つぎに、bの値を考える。bの値は5である。

003const a = 15 ;
004const b = 5;
005
006if ( 15 > 10 && 5 > 10 ) {

このようになる。つぎに、「15 > 10」を考える。 これは比較演算子を適用して、15が10よりも大きいか検証している。 その通りである。15は10よりも大きい。

003const a = 15 ;
004const b = 5;
005
006if ( true && 5 > 10 ) {

&&の左側が「true」になる。つぎに&&の右側を見る。 「5 > 10」である。 これは比較演算子を適用して、5が10よりも大きいか検証している。 無理である。5は10よりも小さい。

003const a = 15 ;
004const b = 5;
005
006if ( true && false ) {

このようになる。ここで「AかつB」を思い出してほしい。 「AかつB」は「A && B」である。

A B A && B 結果
true false true && false false

AかつB 「AとBがどちらもtrueである」という条件式

&&は、両辺がどちらも「true」の場合に、「true」を戻す演算子である。 両辺の内どちらかが「false」の場合、「false」を戻す。

003const a = 15 ;
004const b = 5;
005
006if ( true && false ) {

if文で&&演算子を利用している。&&の右側がfalseなので、 &&演算子を適用した結果、「false」となる。

001<script>
002
003const a = 15 ;
004const b = 5;
005
006if ( false ) {
007
008  alert ( "OK" ) ;
009  
010} else {
011
012  alert ( "NG" ) ;
013}
014</script>

6行目のif文の条件式が「false」になる。つまり、ifブロックは実行されず、elseブロックが実行する。 このプログラムを実行すると、「NG」と表示する。

|| 演算子

「または」を意味する論理演算子を見る。

001<script>
002
003const a = 15 ;
004const b = 5;
005
006if ( a > 10 || b > 10 ) {
007  alert ( "OK" ) ;
008} else {
009  alert ( "NG" ) ;
010}
011</script>

プログラムを実行すると、「OK」と表示する。

「または」演算子のプログラムである。では、解説する。 3行目と4行目で変数a、bを宣言して、 それぞれ「15」と「5」を代入する。 6行目でif文を実行する。 if文の条件式に、論理演算子「||」を利用する。

AまたはB A || B

「AまたはB」をプログラムで書くと、「A || B」になる。

AまたはB 「AとBのどちらかがtrueである」という条件式

「AまたはB」は「AとBのどちらかが真である」という条件式である。 もし、どちらかが「真」ならば、「AまたはB」は「真である」。 つまり、trueとなる。

003const a = 15 ;
004const b = 5;
005
006if ( a > 10 || b > 10 ) {

6行目のif文の条件式を見る。aとbの値は「10」と「5」である。

003const a = 15 ;
004const b = 5;
005
006if ( 15 > 10 || 5 > 10 ) {

このようになる。ここからの・・・、

003const a = 15 ;
004const b = 5;
005
006if ( true || false ) {

こうである。論理演算子「||」の両辺が「true」と「false」となる。

A B A || B 結果
true false true || false true

AまたはB 「AとBのどちらかがtrueである」という条件式

「AまたはB」は「AとBのどちらかが真である」という条件式である。 どちらかが「真」ならば、「AまたはB」は「真である」。分かりやすい。

003const a = 15 ;
004const b = 5;
005
006if ( true || false ) {

このプログラムは、||演算子の両辺の内、左側が「true」なので、全体も「true」になる。

001<script>
002
003const a = 15 ;
004const b = 5;
005
006if ( true ) {
007
008  alert ( "OK" ) ;
009  
010} else {
011
012  alert ( "NG" ) ;
013}
014</script>

6行目のif文の条件式が「true」になる。つまり、ifブロックが実行する。 このプログラムを実行すると、「OK」と表示する。

&&演算子のまとめ

001<script>
002
003//[true]
004alert ( true && true ) ;
005
006//[false]
007alert ( true && false ) ;
008
009//[false]
010alert ( false && true ) ;
011
012//[false]
013alert ( false && false ) ;
014
015</script>

プログラムを実行すると、「true」「false」「false」「false」と表示する。

&&の用法を全てまとめた。 &&の両辺のどちらかに「false」があれば、「false」となる。 両辺がtrueの場合のみ、trueを戻す。

A B A && B 結果
true true true && true true
true false true && false false
false true false && true false
false false false && false false

||演算子のまとめ

001<script>
002
003//[true]
004alert ( true || true ) ;
005
006//[true]
007alert ( true || false ) ;
008
009//[true]
010alert ( false || true ) ;
011
012//[false]
013alert ( false || false ) ;
014
015</script>

プログラムを実行すると、「true」「true」「true」「false」と表示する。

||の用法を全てまとめた。||の両辺のどちらかに「true」があれば、「true」となる。

A B A || B 結果
true true true || true true
true false true || false true
false true false || true true
false false false || false false

公倍数を求める

20未満の数の中で、2と3の公倍数を求めるプログラムを記述する。 「2と3の公倍数」という事は、 「2と3で割り切れる数」という事である。 「割り切れる数」という事は、「剰余演算子」を利用すると良い。 20未満の値に対して、2と3の剰余が0の値を探す。

001<script>
002//変数を二つ宣言
003const a = 2 ;
004const b = 3 ;
005
006//最大値
007const MAX = 20 ;
008
009for ( var i = 0 ; i < MAX ; i++ ) {
010  
011  //両方の値で割り切れる場合、変数iを表示
012  if ( i % a == 0 && i % b == 0 ) {
013    alert ( i ) ;
014  }
015}
016</script>

プログラムを実行すると、「0」「6」「12」「18」と表示する。

a÷bの余り a % b ;

計算式「 a ÷ b 」の余りは

a % b

このプログラムである。「 % 」演算子を利用する。

aがbで割り切れる a % b == 0 ;

数値aが数値bで割り切れるという事は、 計算式「 a ÷ b 」の余りが「0」という事である。 余りを算出する場合、「 % 」演算子を利用する。

a % b == 0 ;

このプログラムが「true」になるという事である。 では、プログラムを解説する。

002//変数を二つ宣言
003const a = 2 ;
004const b = 3 ;
005
006//最大値
007const MAX = 20 ;
008
009for ( var i = 0 ; i < MAX ; i++ ) {
010  
011  //両方の値で割り切れる場合、変数iを表示
012  if ( i % a == 0 && i % b == 0 ) {
013    alert ( i ) ;
014  }
015}

3行目と4行目で変数a、bを宣言して「2」と「3」を代入する。7行目で定数MAXを宣言して、 20を代入する。こんかい、20未満の数値で、2と3で割り切れる数を探す。 2と3で割り切れる整数は無限に存在する。そのため「20」未満の数、という制約を設ける。

9行目から16行目のforブロックで公倍数を探す処理をする。 まず、for文はMAX回繰り返す。

最初のfor文繰り返しを見る。 変数iの値は0である。

012if ( 0 % 2 == 0 && 0 % 3 == 0 ) {
013  alert ( i ) ;
014}

「0」を何で割っても、剰余は「0」である。

012if ( 0 == 0 && 0 == 0 ) {
013  alert ( i ) ;
014}

このようになる。進める。

012if ( true && true ) {
013  alert ( i ) ;
014}

&&演算子の両辺が「true」なので、if文の条件式は「true」になる。 ifブロックが実行して、「0」と表示する。
では、forブロック二回目を見る。変数iの値は「1」である。

012if ( 1 % 2 == 0 && 1 % 3 == 0 ) {
013  alert ( i ) ;
014}

「 1 % 2 は 1 」、「 1 % 3 は 1 」である。

012if ( 1 == 0 && 1 == 0 ) {
013  alert ( i ) ;
014}

どちらも、falseである。if文は実行しない。

forブロック3回目を見る。変数iの値は「2」である。

012if ( 2 % 2 == 0 && 2 % 3 == 0 ) {
013  alert ( i ) ;
014}

「 2 % 2 は 0 」、「 2 % 3 は 2 」である。

012if ( 0 == 0 && 2 == 0 ) {
013  alert ( i ) ;
014}
012if ( true && false ) {
013  alert ( i ) ;
014}

このプログラムは、 && の左側が「true」である。 しかし、&&の右側が「false」である。どちらかが「false」の場合、 &&演算子の結果は「false」である。if文は実行しない。

forブロック4回目を見る。変数iの値は「3」である。

012if ( 3 % 2 == 0 && 3 % 3 == 0 ) {
013  alert ( i ) ;
014}

「 3 % 2 は 1 」、「 3 % 3 は 0 」である。

012if ( 1 == 0 && 0 == 0 ) {
013  alert ( i ) ;
014}
012if ( false && true ) {
013  alert ( i ) ;
014}

このプログラムは、 && の右側は「true」である。 しかし、&&の左側が「false」である。どちらかが「false」の場合、 &&演算子の結果は「false」である。if文は実行しない。

さて、なんやかんやでいろいろ進んでいく。

i i%2 i%3 i%2 == 0 i%3 == 0 結果
00 % 2 [ 0 ]0 % 3 [ 0 ]0 == 0 [ true ]0 == 0 [ true ]true
11 % 2 [ 1 ]1 % 3 [ 1 ]1 == 0 [ false ]1 == 0 [ false ]false
22 % 2 [ 0 ]2 % 3 [ 2 ]0 == 0 [ true ]2 == 0 [ false ]false
33 % 2 [ 1 ]3 % 3 [ 0 ]1 == 0 [ false ]0 == 0 [ true ]false
44 % 2 [ 0 ]4 % 3 [ 1 ]0 == 0 [ true ]1 == 0 [ false ]false
55 % 2 [ 1 ]5 % 3 [ 2 ]1 == 0 [ false ]2 == 0 [ false ]false
66 % 2 [ 0 ]6 % 3 [ 0 ]0 == 0 [ true ]0 == 0 [ true ]true
77 % 2 [ 1 ]7 % 3 [ 1 ]1 == 0 [ false ]1 == 0 [ false ]false
88 % 2 [ 0 ]8 % 3 [ 2 ]0 == 0 [ true ]2 == 0 [ false ]false
99 % 2 [ 1 ]9 % 3 [ 0 ]1 == 0 [ false ]0 == 0 [ true ]false
1010 % 2 [ 0 ]10 % 3 [ 1 ]0 == 0 [ true ]1 == 0 [ false ]false
1111 % 2 [ 1 ]11 % 3 [ 2 ]1 == 0 [ false ]2 == 0 [ false ]false
1212 % 2 [ 0 ]12 % 3 [ 0 ]0 == 0 [ true ]0 == 0 [ true ]true
1313 % 2 [ 1 ]13 % 3 [ 1 ]1 == 0 [ false ]1 == 0 [ false ]false
1414 % 2 [ 0 ]14 % 3 [ 2 ]0 == 0 [ true ]2 == 0 [ false ]false
1515 % 2 [ 1 ]15 % 3 [ 0 ]1 == 0 [ false ]0 == 0 [ true ]false
1616 % 2 [ 0 ]16 % 3 [ 1 ]0 == 0 [ true ]1 == 0 [ false ]false
1717 % 2 [ 1 ]17 % 3 [ 2 ]1 == 0 [ false ]2 == 0 [ false ]false
1818 % 2 [ 0 ]18 % 3 [ 0 ]0 == 0 [ true ]0 == 0 [ true ]true
1919 % 2 [ 1 ]19 % 3 [ 1 ]1 == 0 [ false ]1 == 0 [ false ]false

変数iは0から19まで増加する。そして、変数の値が 「0」「6」「12」「18」の時に、if文の条件がtrueになる。 解説は以上である。

まとめ

A B A && B 結果
true true true && true true
true false true && false false
false true false && true false
false false false && false false
A B A || B 結果
true true true || true true
true false true || false true
false true false || true true
false false false || false false