論理演算子の考え方
&& (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.」が表示されます。
論理演算子をうまく使うことで、コードを簡潔かつ効率的に記述できるようになります。実務での利用シーンを考えると、理解を深めやすいです。