論理演算子の考え方
&& (AND)について
こんな記述があるとして
result = a && b;
aとbがtrueならtrueを返すって認識だったんですが、間違いらしいです…
&&(論理AND演算子)は、左から右に向かって評価します。つまり、次のような流れです:
最初に左側の式 a を評価します。
a が偽(falsy)であれば、その時点で評価を停止し、a の値が結果となります。
a が真(truthy)であれば、次に右側の式 b を評価します。
b も真であれば、全体の結果は true となります。一方、b が偽であれば、全体の結果は false となります。
要するに、&&
は両方の値がtrue
のときにだけtrue
を返しますが、最初の値がfalse
の場合には、もう一方の値は無視されてfalse
が返されるということです。
例
let a = true;
let b = false;
let result = a && b; // 結果は false
この例では、a
がtrue
なので、次にb
が評価されます。b
がfalse
なので、結果はfalse
になります。
let a = false;
let b = true;
let result = a && b; // 結果は false
この例では、a
がfalse
なので、その時点で結果はfalse
になります。b
は見てもらえません。
このように、論理AND演算子&&
の評価順序とショートサーキット評価について理解しておくことが重要です。
発展編:文字列の比較
文字列の比較でも同様のルールが適用されます。例えば、以下のような記述を考えてみましょう。
let a = "hello";
let b = "world";
let result = a === "hello" && b === "world"; // 結果は true
この例では、a
が"hello"
と等しいかをまずチェックします。a
が"hello"
であれば、次にb
が"world"
と等しいかをチェックします。両方が真なら、結果はtrue
になります。
もう一つの例として:
let a = "hello";
let b = "earth";
let result = a === "hello" && b === "world"; // 結果は false
この場合、a
が"hello"
と等しいため次にb
がチェックされますが、b
は"world"
と等しくないため、結果はfalse
になります。
また、次の例では:
let a = "hi";
let b = "world";
let result = a === "hello" && b === "world"; // 結果は false
a
が"hello"
と等しくないため、その時点で結果はfalse
になり、b
はチェックされません。
文字列の比較でも、論理AND演算子&&
の評価順序とショートサーキット評価のルールが適用されることを覚えておきましょう。
実務での利用例
論理演算子は実務でもよく使われます。例えば、ユーザー入力の処理やデフォルト値の設定などです。
ユーザー入力がない場合のデフォルト値設定
ユーザーが入力を行わなかった場合に、デフォルト値を設定する場合、以下のような記述が使われます。
let userInput = null;
const userName = userInput || "guestUser";
console.log(userName); // 出力: guestUser
この例では、userInput
がnull
の場合、||
(論理OR演算子)を使って"guestUser"
が代入されます。userInput
が空やnull
であるときにデフォルト値を設定する便利な方法です。
Null 合体演算子の利用例
null
や undefined
の場合に限定してデフォルト値を設定する場合、Null 合体演算子 (??
) を使用することが推奨されます。例えば:
let userInput = null;
const userName = userInput ?? "guestUser";
console.log(userName); // 出力: guestUser
この例では、userInput
が null
及びundefined
の場合に限り、userName
に "guestUser"
が代入されます。
複数条件のチェック
また、複数の条件を同時にチェックする場合にも論理演算子が役立ちます。
let user = {
isLoggedIn: true,
isAdmin: false
};
if (user.isLoggedIn && user.isAdmin) {
console.log("Welcome, admin!");
} else {
console.log("Access denied.");
}
この例では、user
がログインしており、かつ管理者である場合にのみ特定のメッセージが表示されます。それ以外の場合は「Access denied.」が表示されます。
論理演算子をうまく使うことで、コードを簡潔かつ効率的に記述できるようになります。実務での利用シーンを考えると、理解を深めやすいです。