演算子 は、Verse プログラミング言語で定義される、被演算子 の数学演算などのアクションを実行するための特殊 関数 です。たとえば、式 1 + 2
では +
が演算子、1
と 2
の両方が被演算子になります。
Verse では、以下の 3 つの形式の演算子を使用します。
-
プレフィックス: 被演算子が 1 つだけあり、その前に演算子が置かれます。
-
インフィックス: 被演算子が 2 つあり、その間に演算子が置かれます。
-
ポストフィックス: 被演算子が 1 つだけあり、その後に演算子が置かれます。
このページでは、Verse で使用できるすべての演算子、それらの機能、そして他の演算子と組み合わせて使用した場合の 評価順 について説明します。
すべての演算子と演算子の優先順位のリスト
複数の演算子を同じ式で使用した場合、それらの演算子は優先度が最も高いものから低いものの順に評価されます。以下の表に Verse に組み込まれたすべての演算子とそれらの優先順位を示します。
名前 | 演算子 | 説明 | 演算子の形式 | 演算子の優先順位 | 例 |
---|---|---|---|---|---|
クエリ | ? |
? 演算子は、logic 値が true であるかどうかをチェックします。詳細については、「クエリ」を参照してください。 |
ポストフィックス | 9 | BossDefeated? |
否定 | not |
not 演算子は、式の成否を反転させます。詳細については、「否定」を参照してください。 |
プレフィックス | 8 | not BossDefeated? |
正 | + |
+ 演算子は、数値のプレフィックスとしてコードの視覚的な整理に役立ちますが、数値を変えることはありません。詳細については、「数学演算」を参照してください。 |
プレフィックス | 8 | +MyScore |
負 | - |
- 演算子は、数値の正負を反転させる、数値のプレフィックスとして使用できます。詳細については、「数学演算」を参照してください。 |
プレフィックス | 8 | -MyScore |
乗算 | * |
* は、2 つの数値を乗算します。詳細については、「数学演算」を参照してください。 |
インフィックス | 7 | MyScore * ScoreMultiplier |
除算 | / |
/ 演算子は、2 つ目の数値の被演算子で 1 つ目の数値の被演算子を割ります。整数除算は失敗する可能性があります。詳細については、「数学演算」を参照してください。 |
インフィックス | 7 | MyScore / ScorePenalty |
加算 | + |
+ 演算子は、2 つの数値を合計します。文字列や配列で使用した場合は 2 つの値が連結されます。詳細については、「数学演算」を参照してください。 |
インフィックス | 6 | MyScore + ScoreBonus |
減算 | - |
- 演算子は、1 つ目の被演算子から 2 つ目の被演算子を引きます。詳細については、「数学演算」を参照してください。 |
インフィックス | 6 | MyScore - ScorePenalty |
加算代入 | set += |
この演算子を使用すると、同じ演算で加算と代入を組み合わせて変数の値を更新できます。詳細については、「数学演算」を参照してください。 | インフィックス | 5 | set MyScore += ScoreBonus |
減算代入 | set -= |
この演算子を使用すると、同じ演算で減算と代入を組み合わせて変数の値を更新できます。詳細については、「数学演算」を参照してください。 | インフィックス | 5 | set MyScore -= ScorePenalty |
乗算代入 | set *= |
この演算子を使用すると、同じ演算で乗算と代入を組み合わせて変数の値を更新できます。詳細については、「数学演算」を参照してください。 | インフィックス | 5 | set MyScore *= ScoreMultiplier |
除算代入 | set /= |
この演算子を使用すると、同じ演算で除算と代入を組み合わせて変数の値を更新できます。ただし、変数が整数の場合を除きます。詳細については、「数学演算」を参照してください。 | インフィックス | 5 | set MyScore /= ScorePenalty |
等号 | = |
= 演算子は、左側の被演算子が右側の被演算子と等しい場合に成功します。それ以外の場合は失敗します。詳細については、「比較」を参照してください。 |
インフィックス | 4 | MyScore = HighScore |
不等号 | <> |
<> 演算子は、左側の被演算子が右側の被演算子と等しくない場合に成功します。それ以外の場合は失敗します。詳細については、「比較」を参照してください。 |
インフィックス | 4 | MyScore <> HighScore |
未満 | < |
< 演算子は、左側の被演算子が右側の被演算子より小さい場合に成功します。それ以外の場合は失敗します。詳細については、「比較」を参照してください。 |
インフィックス | 4 | MyScore < HighScore |
以下 | <= |
<= 演算子は、左側の被演算子が右側の被演算子より小さいか、右側の被演算子と等しい場合に成功します。それ以外の場合は失敗します。詳細については、「比較」を参照してください。 |
インフィックス | 4 | MyScore <= HighScore |
大なり | > |
> 演算子は、左側の被演算子が右側の被演算子より大きい場合に成功します。それ以外の場合は失敗します。詳細については、「比較」を参照してください。 |
インフィックス | 4 | MyScore > HighScore |
以上 | >= |
>= 演算子は、左側の被演算子が右側の被演算子より大きいか、右側の被演算子と等しい場合に成功します。それ以外の場合は失敗します。詳細については、「比較」を参照してください。 |
インフィックス | 4 | MyScore >= HighScore |
論理積 | and |
and 演算子は、すべての被演算子が成功した場合のみに成功します。詳細については、「論理積/論理和演算子」を参照してください。 |
インフィックス | 3 | BossDefeated? and TargetScoreReached? |
論理和 | or |
or 演算子は、被演算子の少なくとも 1 つが成功した場合に成功します。詳細については、「論理積/論理和演算子」を参照してください。 |
インフィックス | 2 | BossDefeated? or TargetScoreReached? |
変数と定数の初期化 | : = |
この演算子を使用すると、定数または変数に値を格納できます。詳細については、「定数と変数」を参照してください。 | インフィックス | 1 | MyScore : int = 42 |
変数割り当て | set = |
この演算子を使用すると、変数に格納された値を更新できます。詳細については、「定数と変数」を参照してください。 | インフィックス | 1 | set MyScore = 42 |
同じ式に優先順位が同じ演算子が複数ある場合、それらの演算子は左から右の順に評価されます。たとえば、式 3*2/4
では、演算子 *
と /
の優先順位が同じであるため、3*2
が最初に評価され、その結果は /
演算子の左側の被演算子になります。
()
で式をグループ化することにより、演算子の評価の順序を変更できます。たとえば、(1+2)*3
と 1+(2*3)
の評価結果は同じになりません。詳細については、「グループ化」を参照してください。
比較
不等値 演算子と 等値 演算子を使用する 比較式 により、成功および失敗フローを制御できます。比較式は 失敗する可能性がある ため、比較演算子は if
式 といった失敗コンテキストのみで使用できます。
以下の表では、演算子とサポートされる 型 がそれぞれ示されています。すべての比較演算子はインフィックス形式です。
演算子 | サポートされるビルトイン型 | 説明 |
---|---|---|
< |
|
< 演算子は、左側の被演算子が右側の被演算子 より小さい 場合に成功します。それ以外の場合は失敗します。 |
<= |
|
<= 演算子は、左側の被演算子が右側の被演算子 より小さいか、右側の被演算子と等しい 場合に成功します。それ以外の場合は失敗します。 |
> |
|
> 演算子は、左側の被演算子が右側の被演算子 より大きい 場合に成功します。それ以外の場合は失敗します。 |
>= |
|
>= 演算子は、左側の被演算子が右側の被演算子 より大きいか、右側の被演算子と等しい 場合に成功します。それ以外の場合は失敗します。 |
<> |
|
<> 演算子は、左側の被演算子が右側の被演算子と 等しくない 場合に成功します。それ以外の場合は失敗します。 |
= |
|
= 演算子は、左側の被演算子が右側の被演算子と 等しい 場合に成功します。それ以外の場合は失敗します。 |
<>
と =
はいずれも array
、map
、tuple
、および class
の各インスタンスをサポートしますが、制限事項もあります。array
、map
、tuple
のインスタンスにはサポートされる型のみを含めることができ、class
のインスタンスは、少なくとも 1 つの var
メンバーが含まれる場合のみにサポートされます。
判定
成功/失敗フローを制御するには、not
、and
、or
演算子を使った 判定式 を使用します。判定式は失敗する可能性があるため、比較演算子は if
式といった失敗コンテキストのみで使用できます。判定演算子を使って、成功または失敗を判断するあらゆる式を利用できます。
Not 演算子
not
判定演算子は、式の成否を反転させます。not
演算子はプレフィックス形式を使用します。
たとえば、expression
が失敗した場合は not expression
が成功します。expression
が成功すると not expression
が失敗し、expression
のエフェクトがコミットされることはありません (式が発生しなかったように処理されます)。
たとえば、次のコードが実行された後にも Example
には初期値「0
」が含まれます。
var Example : int = 0
if (not (set Example = ExampleArray[0])) { … }
式が成功するかを確認するために not not expression
を使用できますが、その式が実際に実行されないようにする必要があります。
p 式の結果 |
not p 式の結果 |
not not p 式の結果 |
---|---|---|
成功して結果は p |
式は失敗し、p のエフェクトはコミットされません。式の結果は値なしとなります。 |
式は成功しますが、p のエフェクトはコミットされません。式の結果は true となります。 |
失敗して結果は値なし | 式は成功します。式の結果は true となります。 |
式は失敗します。式の結果は値なしとなります。 |
式を評価する not 演算子の参照は p で表されています。
And / Or 演算子
インフィックス形式を使用する and
判断演算子は、両方の被演算子が成功するか、少なくともいずれかの被演算子が失敗した場合に成功する、失敗する可能性がある式です。
or
判断演算子はインフィックス形式を使用し、次のような特徴を持ちます。
- 最初の被演算子の失敗コンテキストである。
- 2 つ目の被演算子が失敗する可能性がある場合のみに、失敗する可能性がある式となる。
最初の被演算子が成功した場合、or
演算子では 2 つ目の被演算子の評価をスキップします。
次の表は、and
と or
演算子を使った判定式から導き出される、被演算子の成否のすべての組み合わせを示しています。
p 式の結果 |
q 式の結果 |
p and q 式の結果 |
p or q 式の結果 |
---|---|---|---|
成功して結果は p |
成功して結果は q |
式が成功するので、p と q の両方のエフェクトがコミットされます。式の結果は q となります。 |
式は成功し、p のエフェクトのみがコミットされます。p が成功したため、q は実行されません。式の結果は p となります。 |
成功して結果は p |
失敗して結果は値なし | 式は失敗し、p と q どちらのエフェクトもコミットされません。結果は値なしとなります。 |
式は成功し、p のエフェクトのみがコミットされます。p が成功したため、q は実行されません。式の結果は p となります。 |
失敗して結果は値なし | 成功して結果は q |
式は失敗し、p と q どちらのエフェクトもコミットされません。結果は値なしとなります。 |
式は成功し、q のエフェクトのみがコミットされます。式の結果は q となります。 |
失敗して結果は値なし | 失敗して結果は値なし | 式は失敗し、p と q どちらのエフェクトもコミットされません。結果は値なしとなります。 |
式は失敗し、p と q どちらのエフェクトもコミットされません。式の結果は値なしとなります。 |
式を評価する and および or 演算子の参照は、p と q で表されています。
数学演算
数式 を使用すると、数値を使って 4 つの基礎的な数学演算 (加算、減算、乗算、除算) を行い、文字列を連結させることができます。すべての演算子はインフィックス形式を使用しますが、+
と -
については、例外として数値のプレフィックスとしても使用できます。
また、set X += 10
といった割り当て演算子もあります。これらは演算を実行してから結果を代入するのとほぼ同じ (set X = X + 10
) ですが、このケースでは X
が一度だけ評価されるという点が異なります。代入演算子の結果は、変数の更新に使用する値となります。
以下の表では、演算子とサポートされる型がそれぞれ示されています。
演算子 | サポートされるビルトイン型 | 説明 |
---|---|---|
+ |
|
+ 演算子は、2 つの数値を合計します。文字列や配列で使用した場合は 2 つの値が連結されます。+ 演算子は、数値のプレフィックス (たとえば +6 ) としてコードの視覚的な整理に役立ちますが、数値を変えることはありません。 |
- |
|
- 演算子は、1 つ目の被演算子から 2 つ目の被演算子を引きます。- 演算子は、たとえば -3.2 の数値の正負を反転させる、数値のプレフィックスとして使用することもできます。 |
* |
|
* は、2 つの数値を乗算します。 |
/ |
|
/ 演算子により、最初の数値の被演算子が 2 つ目の数値の被演算子で除算されます。整数除算は失敗する可能性があり、rational 型を返します。整数除算の詳細については、「int」を参照してください。 |
set += |
|
この演算子を使用すると、同じ演算で加算と代入を組み合わせて変数の値を更新できます。 |
set -= |
|
この演算子を使用すると、同じ演算で減算と代入を組み合わせて変数の値を更新できます。 |
set *= |
|
この演算子を使用すると、同じ演算で乗算と代入を組み合わせて変数の値を更新できます。 |
set /= |
|
この演算子を使用すると、同じ演算で除算と代入を組み合わせて変数の値を更新できます。ただし、変数が整数の場合を除きます。整数除算の詳細については、「int」を参照してください。 |
クエリ
クエリ式 では、演算子 ?
(クエリ) を使用して logic
値が true
かどうかをチェックします。他の場合は式が失敗します。?
(クエリ) 演算子ではポストフィックス形式を使用します。
p 式の結果 |
p? 式の結果 |
---|---|
true |
成功して結果は true になります。 |
false |
失敗して結果は値なしになります。 |
式を評価する ? (クエリ) 演算子の参照は、p で表されています。
その例を以下に示します。
if (IsMorning?):
Say("Good Morning!")