重なった条件の処理
if文では、1つの条件だけでなく、複数の条件を組み合わせて判定したい場面があります。
前ページでは、if文を入れ子にすることで条件を重ねる方法を紹介しました。
ただし、条件が増えていくと、入れ子は次第に読みづらくなっていきます。
そこで使われるのが論理演算子です。
論理演算子を使うと、複数の条件を1つの条件としてまとめて書くことができ、処理の意図が分かりやすくなります。
このページでは、重なった条件を整理して書くための考え方として、論理演算子の基本的な使い方を解説します。
論理積(AND)
論理積は複数の条件がすべて満たされた場合に処理を実行したいときに使います。
条件を並べて書くことで、条件1も条件2満たしているかを一度に判定できます。
構文
if(条件1 && 条件2){
処理;
}
&&でつないだ条件は、両方が条件に合っている場合のみ成立します。
どちらか一方でも条件に合わない場合は、成立しません。
前ページでネストしたif文の書き換えを行ってみます。
前ページのコード例
//ifDuplication.js
let english = 85;
let math = 78;
if (english >= 80) {
if (math >= 90) {
alert('合格');
} else {
alert('不合格');
}
} else {
alert('不合格');
}
前ページのコード例だと条件を満たさないので、少し書き換えます。
条件式に注目してください。
コード例
//ifAnd1.js
let english = 85;
let math = 82;
if (english >= 80 && math >= 80) {
alert('合格');
} else {
alert('不合格');
}
動作例
english >= 80 と math >= 80 の両方が条件に合っているため、合格が表示されます。
どちらか一方だけ条件を満たしている場合は、elseのブロック内の処理が実行され、不合格が表示されます。
このように、複数の条件を同時に満たす必要がある場合に&&を使います。
また、&&は複数使うことができます。
コード例
//ifAnd2.js
let score = [85, 82, 90];
if (score[0] >= 80 && score[1] >= 80 && score[2] >=80) {
alert('合格');
} else {
alert('不合格');
}
動作例
こちらもすべて条件を満たしているため、合格が表示されます。
このように、配列の要素を条件として論理演算子を使うことも可能です。
論理和(OR)
論理和は、複数の条件のうち、どれか1つでも満たされた場合に処理を実行したいときに使います。
条件を並べて書くことで、条件1または条件2を満たしているかを一度に判定できます。
構文
if(条件1 || 条件2){
処理;
}
||でつないだ条件は、いずれか一方でも条件に合っていれば成立します。
両方の条件に合っていない場合のみ、成立しません。
コード例
//ifOr1.js
let english = 85;
let math = 65;
if (english >= 80 || math >= 80) {
alert('合格');
} else {
alert('不合格');
}
動作例
この例では、英語または数学のどちらかが80点以上であれば合格としています。
englishは条件を満たしているため、mathが条件に合っていなくても合格が表示されます。
両方の条件が合っていない場合のみ、elseのブロックが実行されます。
このように、複数の条件のうち1つでも満たせばよい場合に||を使います。
また、論理和も論理積と同様に、複数並べて使用できます。
コード例
//ifOr2.js
let score = [75, 82, 70];
if (score[0] >= 80 || score[1] >= 80 || score[2] >=80) {
alert('合格');
} else {
alert('不合格');
}
動作例
この例では、配列の中に1つでも80点以上の値があれば合格になります。
論理否定(NOT)
否定は、条件の結果を反転させたいときに使います。
条件に合っている場合ではなく、条件に合っていない場合に処理を行いたいときに便利です。
構文
if(!条件){
処理;
}
!は、条件の結果を反対にします。
条件が成立している場合は成立していない状態に、成立していない場合は成立している状態に変わります。
コード例
//ifNot.js
let score = 60;
if (!(score >= 80)) {
alert('不合格');
} else {
alert('合格');
}
動作例
この例では、80点以上かどうかという条件を否定しています。
scoreが80未満の場合、条件は否定によって成立するため「不合格」が表示されます。
否定を使うことで、条件に当てはまらない場合を直接表現できます。
論理演算子を組み合わせる
論理演算子は、1つだけで使うだけでなく、複数を組み合わせて使うことができます。
条件が増えてくると、1つの論理演算子だけでは表現しきれない場合があります。
論理演算子を組み合わせることで、この条件とこの条件を満たしていて、さらにこの条件には当てはまらないといった、より細かい判定が可能になります。
コード例
//logicOperators.js
const job = '学生';
let score = 80;
let age = 20;
if (score >= 80 && (age >= 20 || !(job==='学生'))) {
alert('合格');
} else {
alert('合格');
}
動作例
このコードでは、複数の条件を組み合わせて合否を判定しています。
まず、jobには学生、scoreには80、ageには20が代入されています。
if文では、最初にscoreが80以上かどうかを確認しています。
この条件を満たしていない場合は、その時点で不合格になります。
scoreが80以上の場合は、次に括弧でまとめられた条件が判定されます。
この部分では、年齢が20歳以上である、または学生ではないという2つの条件のどちらかに当てはまるかを確認しています。
job === '学生'は学生かどうかを判定していますが、先頭に!が付いているため、学生ではない場合という意味になります。
つまり、この括弧内の条件は20歳以上、または学生ではない場合に成立します。
scoreの条件と、この括弧内の条件の両方が満たされた場合に、if文の中の処理が実行され、合格が表示されます。
一方で、どれか1つでも条件に合わなかった場合は、elseの処理が実行されます。
このように論理演算子を組み合わせることで、条件を細かく分けながらも、1つのif文でまとめて判定することができます。
また、条件が複雑になる場合は、括弧を使って判定のまとまりを明確にすることが重要です。