Node-RED / Node.js / JavaScript で使う演算子
このガイドでは、Node-REDのFunctionノードやSwitchノードで使うJavaScript演算子について、初心者の方でも理解できるように詳しく説明します。
演算子(オペレータ)とは、計算や比較を行うための記号です。 日常生活で例えると、電卓のボタンのようなものです。 「+」を押せば足し算、「-」を押せば引き算ができるように、プログラムでも記号を使って様々な処理を行います。
🧮 電卓に例えると:
+ 演算子- 演算子* 演算子/ 演算子< > === 演算子数値の計算を行う
値を比較してtrue/falseを返す
複数の条件を組み合わせる
変数に値を設定する
数値の計算を行う演算子です。小学校で習った算数と同じ概念ですが、記号が少し異なります。
| 演算子 | 名前 | 例 | 結果 | 説明 |
|---|---|---|---|---|
| + | 加算(足し算) | 10 + 3 | 13 | 左右の値を足す |
| - | 減算(引き算) | 10 - 3 | 7 | 左から右を引く |
| * | 乗算(掛け算) | 10 * 3 | 30 | 左右の値を掛ける(×ではなく*) |
| / | 除算(割り算) | 10 / 3 | 3.333... | 左を右で割る(÷ではなく/) |
| % | 剰余(余り) | 10 % 3 | 1 | 割り算の余りを求める |
| ** | べき乗 | 2 ** 3 | 8 | 2の3乗 = 2×2×2 |
📌 よく使う剰余演算子(%)の使い道:
n % 2 === 0 なら偶数count % 5 === 0 なら5回に1回index % 配列の長さ で配列をループ⚠️ 文字列の「+」に注意!
+ は文字列を連結する機能もあります。数値と文字列を足すと予期しない結果になります。
2つの値を比較して、true(真)またはfalse(偽)を返す演算子です。 条件分岐(if文やSwitchノード)で必須の知識です。
| 演算子 | 名前 | 例 | 結果 | 説明 |
|---|---|---|---|---|
| === | 厳密等価 | 5 === 5 | true | 値と型が両方同じ(推奨) |
| !== | 厳密不等価 | 5 !== "5" | true | 値または型が異なる(推奨) |
| == | 等価 | 5 == "5" | true | 型変換後に値が同じ(非推奨) |
| != | 不等価 | 5 != "5" | false | 型変換後に値が異なる(非推奨) |
| < | 小なり | 3 < 5 | true | 左が右より小さい |
| > | 大なり | 3 > 5 | false | 左が右より大きい |
| <= | 以下 | 5 <= 5 | true | 左が右以下 |
| >= | 以上 | 3 >= 5 | false | 左が右以上 |
💡 === を使うべき理由:
== は型変換を行うため、予期しない結果を招くことがあります。
バグの原因になりやすいため、常に ===(厳密等価)を使うことを推奨します。
Switchノードでは比較演算子を視覚的に設定できます:
複数の条件を組み合わせたり、条件を反転させる演算子です。
| 演算子 | 名前 | 例 | 結果 | 説明 |
|---|---|---|---|---|
| && | AND(かつ) | true && true | true | 両方trueの場合のみtrue |
| || | OR(または) | true || false | true | どちらかがtrueならtrue |
| ! | NOT(否定) | !true | false | true/falseを反転 |
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| true | true | true | true | false |
| true | false | false | true | false |
| false | true | false | true | true |
| false | false | false | false | true |
📌 日常生活での例え:
変数に値を設定したり、計算結果を代入する演算子です。
| 演算子 | 名前 | 例 | 同等の処理 | 説明 |
|---|---|---|---|---|
| = | 代入 | x = 5 | - | 値を変数に設定 |
| += | 加算代入 | x += 3 | x = x + 3 | 足して代入 |
| -= | 減算代入 | x -= 3 | x = x - 3 | 引いて代入 |
| *= | 乗算代入 | x *= 3 | x = x * 3 | 掛けて代入 |
| /= | 除算代入 | x /= 3 | x = x / 3 | 割って代入 |
| ++ | インクリメント | x++ | x = x + 1 | 1を足す |
| -- | デクリメント | x-- | x = x - 1 | 1を引く |
複数の演算子を使う場合、計算される順序があります。数学の四則演算と同じく、掛け算・割り算が先に計算されます。
| 優先度 | 演算子 | 説明 |
|---|---|---|
| 1(最高) | () |
括弧(グループ化) |
| 2 | ! ++ -- |
否定、インクリメント |
| 3 | ** |
べき乗 |
| 4 | * / % |
乗算、除算、剰余 |
| 5 | + - |
加算、減算 |
| 6 | < <= > >= |
比較(大小) |
| 7 | === !== == != |
等価比較 |
| 8 | && |
論理AND |
| 9 | || |
論理OR |
| 10(最低) | = += -= など |
代入 |
📌 迷ったら括弧を使う!
優先順位を覚えるより、括弧 () を使って明示的に計算順序を指定するのが安全です。
JavaScriptコードを直接書くため、すべての演算子が使用可能です。
比較演算子をGUIで設定できます。
JSONata式を使って演算が可能です。
Mustache記法では演算子は使えませんが、JavaScript処理を挟めば可能です。
📝 課題:
2つの数値を受け取り、四則演算の結果をすべて出力してください。
🎯 要求仕様:
✅ 成功の条件:
{"sum": 13, "diff": 7, "product": 30, "quotient": 3.3333..., "remainder": 1} が表示されるsum(加算: 10+3=13)、diff(減算: 10-3=7)、product(乗算: 10*3=30)の値がすべて正しいquotient(除算: 10/3≒3.33)と remainder(剰余: 10%3=1)の値が正しいInjectノードの設定:
Functionノードのコード:
📝 課題:
温度に応じて3段階の判定結果を出力してください。
🎯 要求仕様:
✅ 成功の条件:
Switchノードの設定:
📝 課題:
温度と湿度の複合条件でアラートを判定してください。
🎯 要求仕様:
✅ 成功の条件:
{"temperature": 32, "humidity": 85, "status": "熱中症警報"} が出力される{"status": "注意報"} が出力される(高温のみ条件を満たす){"status": "正常"} が出力されるtemperature、humidity、status の3つのキーがすべて含まれているFunctionノードのポイント:
📝 課題:
メッセージをカウントし、5回ごとに集計結果を出力してください。
🎯 要求仕様:
✅ 成功の条件:
{"message": "5件処理完了", "totalCount": 5} が出力されるtotalCount が10になっている(5の倍数ごとに繰り返し動作する)totalCount: 5 が出力されるフローコンテキストの使用:
flow.get("count") で値を取得flow.set("count", value) で値を保存count % 5 === 0 で5の倍数を判定+ - * / % で数値計算=== !== < > <= >= で値を比較(true/false)&&(AND)||(OR)!(NOT)で条件を組み合わせ= += ++ で変数に値を設定() で明示===(厳密等価)を使う= は代入、== は比較&& が || より先に評価される演算子の基礎をマスターしたら、以下も学んでみましょう:
条件 ? 真の値 : 偽の値値 ?? デフォルト値obj?.prop?.nested& | ^ ~(IoTでフラグ処理に使用)| 問題 | 原因 | 解決方法 |
|---|---|---|
| "103" になる | "10" + 3 で文字列連結 | Number("10") + 3 で数値に変換 |
| 常にtrue/falseになる | = と == を間違えている | 比較は === を使用 |
| NaN が出る | 数値でない値で計算 | isNaN() でチェック、Number()で変換 |
| Infinity が出る | 0で割り算 | 割る前に 0 でないかチェック |
| 条件が期待通りにならない | 演算子の優先順位 | 括弧 () で順序を明示 |
| undefined との比較 | 変数が未定義 | typeof で型チェック、?? 演算子でデフォルト値 |
このガイドが役に立ちましたら、実際のプロジェクトで練習してみてください!
演算子はプログラミングの基礎中の基礎です。