演算子
優先順位の高いものから順に示します。二項演算子はすべて左結合です: a - b - c は
(a - b) - c です。
| レベル | 演算子 | 意味 | オペランドの種類 |
|---|---|---|---|
| 1 | ( ) f(…) | グループ化、組み込み関数の呼び出し | |
| 2 | ! - ~ (単項) | 論理否定、符号反転、ビット否定 | !: 任意 · -: Integer/Real · ~: Integer |
| 3 | * / | 乗算、除算 | Integer/Real |
| 4 | + - | 加算または連結、減算 | Integer/Real、または Text + Text |
| 5 | << >> | 左シフト、算術右シフト | Integer |
| 6 | < <= > >= | 大小比較 | 2 つの数値、または 2 つの Text |
| 7 | == != | 等価 | 任意 |
| 8 | & | ビット AND | Integer |
| 9 | ^ | ビット XOR | Integer |
| 10 | | | ビット OR | Integer |
| 11 | && | 論理 AND (両辺が常に評価される) | 任意 (truthy かどうか) |
| 12 | || | 論理 OR (両辺が常に評価される) | 任意 (truthy かどうか) |
剰余 (%)、べき乗演算子、三項演算子 (?:)、カンマ演算子はありません。
警告
&& と || は短絡評価されません。 両方のオペランドが常に左、右の順に評価されます。
左辺で結果が決まっていても右辺の組み込み関数の呼び出しは実行され、その呼び出しが失敗すると
アクションが停止します。代わりに if を入れ子にして保護してください。
text = ClipboardGetText();
idx = StringGetIndexOf(text, ":");
// 誤り: idx が -1 のときも StringGetSubstring(text, -1, 5) が実行され、アクションが停止する
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }
// 正しい: 2 つ目のテストは 1 つ目が成り立つときだけ実行される
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
警告
ビット演算子は比較演算子より結合が弱くなります (C 言語と同じです)。 flags & 4 == 4 は
flags & (4 == 4)、つまり flags & true と読み取られ、結果は 0 になります。マスクは必ずかっこで囲んでください:
(flags & 4) == 4 または (flags & 4) != 0。
警告
比較は連鎖しません。 0 < x < 10 は (0 < x) < 10 と読み取られ、Bool と Integer を比較するため、
常に false になります。x > 0 && x < 10 と書いてください。