式と演算子#
式は一つの型付きの値を表します。数値の計算、関数呼び出し、Booleanの比較を組み合わせられます。
計算の順番#
上の行ほど先に計算します。同じ行の二項演算子は左から結び付きます。()で順番を明示できます。
| 優先順位 | 演算子 | 意味 |
|---|---|---|
| 高い | 関数呼び出し、() |
呼び出し、グループ化 |
| ↓ | +値、-値、!値 |
符号、Booleanの反転 |
| ↓ | *、/ |
掛け算、割り算 |
| ↓ | +、- |
足し算、引き算 |
| ↓ | <、<=、>、>= |
大小の比較 |
| 低い | ==、===、!=、!== |
同じか、異なるか |
function main(value: Float): Boolean {
const scaled = value * 2 + 1;
return !(scaled < 0);
}
!はBooleanだけに使えます。!0のような数値からの暗黙変換はありません。+もStringの連結には使いません。Stringにはstring_concatを使います。
比較と型#
==と===は、CNLでは同じ厳密な型付き比較です。!=と!==も同じです。JavaScriptのようにStringやBooleanを数値へ変換して比較しません。IntegerとFloatなど、異なる種類の値は、対応する明示変換でそろえます。
function main(value: Float, limit: Float): Boolean {
return value >= limit;
}
FloatでNaNが含まれると、大小比較は偽になります。NaNは自分自身とも等しくありません。そのためa <= bと!(b < a)はNaNを含む場合に異なります。通常の大小比較を表したいときは、目的の演算子を直接使ってください。
Vector、Color、Fieldに対して使える演算は、それぞれの型の共通規則で決まります。任意の型がすべての演算子に対応する、という意味ではありません。型が合わなければ診断を出します。
値を選ぶ#
function main(value: Float): Float {
return select(value >= 0, value, -value);
}
select(条件, 真の場合の値, 偽の場合の値)は値の選択です。両方の値は計算の依存関係に含まれます。片方のファイル読み込みやエラーを回避するための遅延分岐には使えません。
一般のif、&&、||、?:は未実装です。selectをそれらと同じものとして扱いません。余りや累乗などは、対応するMath関数を使います。%や**を含むJavaScriptの演算子すべてには対応していません。