この記事では、JavaScriptにおけるさまざまな種類の演算子について学びます。論理演算子、ビット演算子、条件演算子(三項演算子)、カンマ演算子、typeof演算子など、プログラミングで頻繁に使用される演算子の機能と使用方法を理解できます。また、演算子の優先順位と結合則についても学び、複雑な式の評価順序を把握する方法を習得できます。
はじめに
この記事のコードをコピペして出力してみよう。
VSCodeでコードを書き、Node.jsでコンソール出力する方法がおすすめです。
論理演算子
論理演算子は、ブール値(真偽値)を操作するために使用されます。主な論理演算子は以下の3つです:
- && (AND): 両方のオペランドが真の場合に真を返します。
- || (OR): どちらかのオペランドが真の場合に真を返します。
- ! (NOT): オペランドの真偽値を反転させます。
以下は、これらの演算子を使用した簡単なプログラム例です:
// 論理演算子の例
let x = true;
let y = false;
// AND演算子
console.log("x && y:", x && y); // false
// OR演算子
console.log("x || y:", x || y); // true
// NOT演算子
console.log("!x:", !x); // false
出力結果:
x && y: false
x || y: true
!x: false
このコードでは、論理AND、OR、NOTの基本的な使用方法を示しています。重要なポイントは、これらの演算子が短絡評価を行うことです。例えば、x && y
の場合、x
がfalse
であればy
の評価は行われません。
ビット演算子
ビット演算子は、数値を2進数として扱い、ビットレベルでの操作を行います。主なビット演算子は以下の通りです:
- & (ビットAND)
- | (ビットOR)
- ^ (ビットXOR)
- ~ (ビットNOT)
- << (左シフト)
- >> (符号付き右シフト)
- >>> (符号なし右シフト)
以下は、ビット演算子を使用した簡単なプログラム例です:
// ビット演算子の例
let a = 5; // 2進数: 0101
let b = 3; // 2進数: 0011
// ビットAND
console.log("a & b:", a & b); // 1 (2進数: 0001)
// ビットOR
console.log("a | b:", a | b); // 7 (2進数: 0111)
// 左シフト
console.log("a << 1:", a << 1); // 10 (2進数: 1010)
出力結果:
a & b: 1
a | b: 7
a << 1: 10
このコードでは、ビットAND、OR、左シフトの基本的な使用方法を示しています。ビット演算は、フラグの設定や高速な計算に使用されることがあります。
- 変数の定義
let a = 5; // 2進数: 0101
let b = 3; // 2進数: 0011
ここで、2つの変数 a
と b
を定義しています。コメントには各数値の2進数表現が示されています。
- ビットAND演算 (&)
console.log("a & b:", a & b); // 1 (2進数: 0001)
ビットAND演算子 &
は、両方のビットが1の場合にのみ1を返します。
0101 (a)
& 0011 (b)
----
0001 (結果)
各ビット位置で両方が1の場合のみ1になるため、結果は1(2進数で0001)になります。
- ビットOR演算 (|)
console.log("a | b:", a | b); // 7 (2進数: 0111)
ビットOR演算子 |
は、どちらかのビットが1の場合に1を返します。
0101 (a)
| 0011 (b)
----
0111 (結果)
各ビット位置でどちらかが1の場合に1になるため、結果は7(2進数で0111)になります。
- 左シフト演算 (<<)
console.log("a << 1:", a << 1); // 10 (2進数: 1010)
左シフト演算子 <<
は、ビットを指定した数だけ左にシフトします。
0101 (a)
左に1ビットシフト
1010 (結果)
5(0101)を左に1ビットシフトすると、10(1010)になります。これは実質的に2倍することと同じです。
ビット演算は、個々のビットレベルで数値を操作します。これらの演算は:
- データの圧縮や暗号化
- 高速な数学的操作
- フラグやオプションの設定
などの場面で使用されます。初心者にとっては複雑に見えるかもしれませんが、特定のプログラミングタスクでは非常に強力なツールとなります。
その他の演算子
JavaScriptには、他にもいくつかの重要な演算子があります:
- ?: (条件演算子): 条件に基づいて値を選択します。
- , (カンマ演算子): 複数の式を1つの文で評価します。
- delete: オブジェクトのプロパティを削除します。
- typeof: オペランドの型を文字列として返します。
以下は、これらの演算子を使用した簡単なプログラム例です:
// その他の演算子の例
// 条件演算子
let age = 20;
let status = (age >= 18) ? "大人" : "子供";
console.log("ステータス:", status); // "大人"
// カンマ演算子
let x = (2, 3, 5);
console.log("x:", x); // 5
// typeof演算子
console.log("typeof 42:", typeof 42); // "number"
出力結果:
ステータス: 大人
x: 5
typeof 42: number
このコードでは、条件演算子、カンマ演算子、typeof演算子の基本的な使用方法を示しています。条件演算子は、if-else文の短縮形として便利です。
このコードは、JavaScriptのいくつかの演算子の使用例を示しています。初心者向けに詳しく解説していきます。
条件演算子 (三項演算子)
let age = 20;
let status = (age >= 18) ? "大人" : "子供";
console.log("ステータス:", status); // "大人"
条件演算子は 条件 ? 真の場合の値 : 偽の場合の値
の形式で使用します。
age >= 18
が条件です。- 条件が真(ageが18以上)の場合、”大人” が返されます。
- 条件が偽(ageが18未満)の場合、”子供” が返されます。
この例では、ageが20なので条件は真となり、statusには “大人” が代入されます。
カンマ演算子
let x = (2, 3, 5);
console.log("x:", x); // 5
カンマ演算子は、複数の式を評価し、最後の式の結果を返します。
(2, 3, 5)
の中で、2と3は評価されますが、その結果は無視されます。- 最後の値である5がxに代入されます。
カンマ演算子はあまり一般的ではありませんが、複数の操作を1行で行いたい場合に使用されることがあります。
typeof演算子
console.log("typeof 42:", typeof 42); // "number"
typeof演算子は、オペランドのデータ型を文字列として返します。
typeof 42
は、42の型を調べます。- 42は数値なので、”number” が返されます。
typeof演算子は、変数や値のデータ型を確認するのに便利です。主な戻り値には “number”, “string”, “boolean”, “undefined”, “object”, “function” などがあります。
まとめ:
- 条件演算子は、簡潔な if-else 文として使用できます。
- カンマ演算子は複数の式を評価し、最後の式の結果を返します。
- typeof演算子は、値のデータ型を文字列として返します。
これらの演算子は、コードを簡潔に書いたり、データ型を確認したりする際に役立ちます。特に条件演算子とtypeof演算子は、JavaScriptプログラミングでよく使用されます。
演算子の優先順位と結合則
演算子の優先順位は、複数の演算子が使用されている式でどの演算が先に実行されるかを決定します。結合則は、同じ優先順位の演算子がどのように評価されるかを定義します。
一般的に、算術演算子は比較演算子よりも優先順位が高く、論理演算子はそれらよりも低い優先順位を持ちます。括弧 ()
を使用して、優先順位を明示的に指定することができます。
以下は、優先順位と結合則を示す簡単なプログラム例です:
// 演算子の優先順位と結合則の例
let result = 2 + 3 * 4;
console.log("2 + 3 * 4 =", result); // 14 (乗算が先に実行される)
let x = 5;
let y = 10;
let z = 15;
// 左結合の例
let leftAssoc = x - y - z;
console.log("x - y - z =", leftAssoc); // -20 ((5 - 10) - 15)
// 右結合の例(べき乗演算子)
let rightAssoc = 2 ** 3 ** 2;
console.log("2 ** 3 ** 2 =", rightAssoc); // 512 (2 ** (3 ** 2))
出力結果:
2 + 3 * 4 = 14
x - y - z = -20
2 ** 3 ** 2 = 512
このコードでは、算術演算子の優先順位と、左結合と右結合の違いを示しています。優先順位と結合則を理解することは、複雑な式を正確に評価するために重要です。
まとめ
- 論理演算子(&&, ||, !)は条件の組み合わせや真偽値の操作に使用されます。
- ビット演算子(&, |, ^, ~, <<, >>, >>>)は整数のビットレベルでの操作に用いられます。
- 条件演算子(三項演算子)は簡潔な条件分岐を記述するのに役立ちます。
- カンマ演算子は複数の式を一つの文で評価する際に使用されます。
- typeof演算子はオペランドの型を文字列として返します。
- 演算子の優先順位と結合則を理解することで、複雑な式の評価順序を正確に把握できます。
これらの演算子を適切に使用することで、より効率的で読みやすいコードを書くことができます。特に、論理演算子とビット演算子は条件分岐や最適化に重要な役割を果たします。条件演算子(三項演算子)は、簡潔な条件分岐を可能にし、コードの可読性を向上させます。
演算子の優先順位と結合則の理解は、複雑な式を正確に評価する上で非常に重要です。これにより、予期せぬバグを防ぎ、意図した通りの結果を得ることができます。
コメント