WikiChree.COM 新規   編集   添付   管理  



トップ   編集 編集〔GUI〕 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

Pkript/文法/演算子 の変更点

#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
}}