#author("2026-09-04T00:06:04+09:00","default:mcp","bot-mcp") * Pkript/文法/演算子 [#k1d5070a] 式で使える演算子と結合の強さ。グループの仕方はJavaScriptと同じ。 ** リファレンス [#j09d43dc] *** 単項演算子 [#k7dc4ae9] |~演算子|~説明|h |!x|真偽値を反転| |-x / +x|数値に変換して符号を付ける| |~x|ビット反転(32bit整数として扱う)| |typeof x|型名を文字列で返す| |void x|x を評価して null を返す| |++x / --x|1増やす / 減らしてから値を返す| |x++ / x--|値を返してから1増やす / 減らす| typeof が返す文字列は JavaScript と同じ。 |~値|~typeof の結果|h |文字列|"string"| |数値|"number"| |true / false|"boolean"| |null|"object"(JavaScriptと同じ)| |関数|"function"| |オブジェクトと配列|"object"| *** 二項演算子 [#ke6d075d] 結合の強さは下ほど強い。同じ強さの演算子は左から順に評価される(** のみ右から)。 |~強さ|~演算子|~説明|h |1|??|左が null のときだけ右を返す| |2||||論理和(左が真ならそこで止まる)| |3|&&|論理積(左が偽ならそこで止まる)| |4|||ビット論理和| |5|^|ビット排他的論理和| |6|&|ビット論理積| |7|== != === !==|等値比較| |8|< > <= >= instanceof in|大小比較と所属判定| |9|<< >> >>>|ビットシフト| |10|+ -|加算と減算(+ は文字列連結も兼ねる)| |11|* / %|乗算、除算、剰余| |12|**|べき乗(右結合。2**3**2 は 2**9)| - && / || / ?? は左辺で答えが決まる場合、右辺を評価しない - ?? が見るのは「値があるかどうか」だけ。"" や 0 は右辺に落ちない - ?? を && / || と括弧なしで混ぜることはできない(JavaScriptと同じ制限) *** 条件演算子 [#a46e7e13] #highlight{{ 条件 ? 真のときの値 : 偽のときの値 }} *** 代入演算子 [#q4798f3d] |~種類|~演算子|h |単純代入|=| |算術|+= -= *= /= %= **=| |ビット|&= |= ^= <<= >>= >>>=| |条件付き|&&= ||= ??=| 条件付き代入は、条件を満たしたときだけ代入する。x ??= 1 は x が null のときだけ 1 を入れる。 *** プロパティアクセス [#tb399212] |~書き方|~説明|h |obj.key|プロパティを参照| |obj["key"]|キーを式で指定して参照| |obj?.key|obj が null なら null を返し、参照しない| |fn?.(args)|fn が null なら呼び出さない| *** スプレッドと残余引数 [#y804f2fb] |~書き方|~場所|~説明|h |f(...args)|関数呼び出し|配列を引数として展開| |[...arr, x]|配列リテラル|配列の要素を展開| |{ ...obj, k: 1 }|オブジェクトリテラル|プロパティを展開| |function f(...rest)|仮引数|残りの引数を配列で受け取る| ** 使用法 [#vb1d203a] *** 既定値を用意する [#mbbbfbe6] #highlight{{ const name = e.args[0] ?? "ゲスト"; // "" や 0 はそのまま通る const label = e.opts.label || "一覧"; // "" のときも "一覧" になる }} *** null を踏まずにプロパティを読む [#j6791cec] #highlight{{ const first = e.user?.groups?.[0] ?? ""; }} *** 配列を引数として渡す [#ead2bb44] #highlight{{ const nums = [3, 1, 4]; return Math.max(...nums); // 4 }}