Операторы — это специальные функции, определённые в языке программирования Verse, которые выполняют действия над своими операндами (например, арифметические операции). Например, в выражении 1 + 2 знак + является оператором, а 1 и 2 являются операндами.
В Verse имеется три формата операторов:
Префикс: один операнд, оператор находится перед операндом.
Инфикс: два операнда, оператор находится между операндами.
Постфикс: один операнд, оператор находится после операнда.
На этой странице описаны все операторы, которые можно использовать в Verse, принцип их работы и процедура оценки при их использовании в сочетании с другими операторами.
Список всех операторов и приоритет операторов
Когда в одном выражении используется несколько операторов, они рассчитываются в порядке от высшего приоритета к низшему. В таблице ниже перечислены все встроенные операторы языка Verse и их приоритет.
| Имя | Оператор | Описание | Формат оператора | приоритет операторов (operator precedence) | Пример |
|---|---|---|---|---|---|
Оператор запроса |
| Оператор | постфикс (postfix) | 9 |
|
пока |
| Оператор | Префикс | 88 |
|
Положительно |
| Оператор | Префикс | 88 |
|
Отрицательно |
| Вы можете использовать оператор | Префикс | 88 |
|
Оператор умножения |
|
| инфиксный (infix) | 7 |
|
Дивизион |
| Оператор | инфиксный (infix) | 7 |
|
Оператор сложения |
| Оператор | инфиксный (infix) | 6 |
|
Оператор вычитания |
| Оператор | инфиксный (infix) | 6 |
|
Оператор сложения и присваивания |
| С помощью этого оператора можно объединить сложение и присваивание в одной операции для обновления значения переменной. Более подробно об этом рассказано в разделе «Математические операции». | инфиксный (infix) | +5 |
|
Оператор вычитания и присваивания |
| С помощью этого оператора можно объединить вычитание и присваивание в одной операции для обновления значения переменной. Более подробно об этом рассказано в разделе «Математические операции». | инфиксный (infix) | +5 |
|
Оператор умножения и присваивания |
| С помощью этого оператора можно объединить умножение и присваивание в одной операции для обновления значения переменной. Более подробно об этом рассказано в разделе «Математические операции». | инфиксный (infix) | +5 |
|
Оператор деления и присваивания |
| С помощью этого оператора можно объединить деление и присваивание в одной операции для обновления значения переменной, если только переменная не является целым числом. Более подробно об этом рассказано в разделе «Математические операции». | инфиксный (infix) | +5 |
|
Оператор равенства |
| Выражение с оператором | инфиксный (infix) | 4 |
|
Оператор неравенства |
| Выражение с оператором | инфиксный (infix) | 4 |
|
Оператор меньшего значения |
| Выражение с оператором | инфиксный (infix) | 4 |
|
Оператор меньшего или равного значения |
| Выражение с оператором | инфиксный (infix) | 4 |
|
Оператор большего значения |
| Выражение с оператором | инфиксный (infix) | 4 |
|
Оператор большего или равного значения |
| Выражение с оператором | инфиксный (infix) | 4 |
|
И ещё |
| Выражение с оператором | инфиксный (infix) | +3 |
|
Или |
| Выражение с оператором | инфиксный (infix) | +2 |
|
Оператор инициализации переменных и констант |
| С помощью этого оператора можно сохранять значения в константе или переменной. Более подробно об этом рассказано в разделе Константы и переменные. | инфиксный (infix) | 1-й |
|
Оператор присваивания переменной |
| С помощью этого оператора можно обновлять значения, хранящиеся в переменной. Более подробно об этом рассказано в разделе Константы и переменные. | инфиксный (infix) | 1-й |
|
Если в одном выражении присутствуют операторы с одинаковым приоритетом, то они применяются слева направо. Например, в выражении 3*2/4 операторы * и / имеют одинаковый приоритет, поэтому выражение 3*2 рассчитывается первым, а его результат становится левым операндом для оператора /.
Вы можете изменить порядок расчёта операторов, сгруппировав выражения с помощью круглых скобок (). Например, (1+2)*3 и 1+(2*3) будут возвращать разные значения. Более подробно об этом рассказано в разделе «Группировка».
Сравнение
Вы можете контролировать результат выражения — «успех» или «неудача», — используя выражения сравнения, в которых применяются операторы неравенства и равенства. Выражения сравнения имеют неоднозначный результат, так что вы можете использовать операторы сравнения только в контексте, допускающем неоднозначность (например, в выражениях if).
В таблице ниже приведено описание каждого оператора и поддерживаемых им типов. Все операторы сравнения применяются в формате инфикса.
| Оператор | Поддерживаемые встроенные типы | Описание |
|---|---|---|
|
| Выражение с оператором |
|
| Выражение с оператором |
|
| Выражение с оператором |
|
| Выражение с оператором |
|
| Выражение с оператором |
|
| Выражение с оператором |
Операторы <> и = также поддерживаются для экземпляров array, map, tuple и class, но при этом существуют ограничения. Экземпляры array, map и tuple могут содержать только поддерживаемые типы. Экземпляры class поддерживаются, только если они содержат хотя бы один член var.
Принятие решений
Вы можете контролировать результат выражения — «успех» или «неудача», — используя выражения принятия решений not, and и or. Выражения принятия решений имеют неоднозначный результат, так что вы можете использовать операторы сравнения только в контексте, допускающем неоднозначность (например, в выражениях if). С решающими операторами можно использовать любые выражения, которые могут иметь успешный или неудачный результат.
Оператор «не»
Оператор принятия решений 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 с оператором not.
Операторы «и»/«или»
Оператор принятия решения and использует формат инфикса и является выражением с неоднозначным результатом, которое выполняется успешно, если обе операнда выполняются успешно, или не выдаёт результат, если хотя бы один операнд не выдаёт результат.
Оператор принятия решения and использует формат инфикса и выглядит следующим образом:
Контекст, допускающий неоднозначность, для первого операнда.
Выражение с неоднозначным результатом только в том случае, если второй операнд не выдаёт результат.
Оператор or пропускает оценку второго операнда, если первый операнд был выполнен успешно.
В таблице ниже указаны результаты выражений принятия решений с операторами and и or для всех сочетаний операндов с успешным результатом и его отсутствием.
| Результат выражения p | Результат выражения q | Результат выражения p and q | Результат выражения p or q |
|---|---|---|---|
Выполняется успешно, и результатом является | Выполняется успешно, и результатом является | Выражение выполняется успешно, поэтому эффекты | Выражение выполняется успешно, и только эффекты |
Выполняется успешно, и результатом является | Выражение не даст результата — результатом будет отсутствие значения | Выражение не даст результата, и эффекты | Выражение выполняется успешно, и только эффекты |
Выражение не даст результата — результатом будет отсутствие значения | Выполняется успешно, и результатом является | Выражение не даст результата, и эффекты | Выражение выполняется успешно, фиксируются только эффекты |
Выражение не даст результата — результатом будет отсутствие значения | Выражение не даст результата — результатом будет отсутствие значения | Выражение не даст результата, и эффекты | Выражение не даст результата, и эффекты |
Справка по оценке выражений p и q с операторами and и or.
Математика
Математические выражения позволяют выполнять четыре основных арифметических действия (сложение, вычитание, умножение и деление) с числовыми значениями, а также складывать строки. Все операторы используются в формате инфикса, но операторы + и - также могут выступать в качестве префиксов числовых значений.
Также существуют операторы присваивания (например, set X += 10). Это практически эквивалентно выполнению операции с последующим присваиванием результата, то есть set X = X + 10. Отличие заключается в том, что в данном случае X оценивается только один раз. Результат оператора присваивания — значение, используемое для обновления переменной.
В таблице ниже приведено описание каждого оператора и поддерживаемых им типов.
| Оператор | Поддерживаемые встроенные типы | Описание |
|---|---|---|
|
| Оператор |
|
| Оператор |
|
|
|
|
| Оператор |
|
| С помощью этого оператора можно объединить сложение и присваивание в одной операции для обновления значения переменной. |
|
| С помощью этого оператора можно объединить вычитание и присваивание в одной операции для обновления значения переменной. |
|
| С помощью этого оператора можно объединить умножение и присваивание в одной операции для обновления значения переменной. |
|
| С помощью этого оператора можно объединить деление и присваивание в одной операции для обновления значения переменной, если только переменная не является целым числом. Более подробно о целочисленном делении описано в разделе «Целочисленное значение». |
Оператор запроса
В выражениях запроса используется оператор ? (запрос) для проверки, содержит ли переменная типа logic значение true. Если же значение типа `logic` равно `false`, выражение завершится с ошибкой. Оператор ? (запрос) используется в формате постфикса.
| Результат выражения p | Результат выражения p? |
|---|---|
| Выполняется успешно, и результатом является |
| Выражение не даст результата — результатом будет отсутствие значения. |
Справка по оценке выражений p с оператором ? (запрос).
Пример:
if (IsMorning?):
Say("Good Morning!")