Выражение — это наименьшая единица кода, которая выдаёт результат при расчёте. В Verse всё является выражениями, то есть всё возвращает значение.
Примером может служить выражение if … else
, которое в Verse рассчитывает значение, зависящее от содержимого
блоков выражения. Следующий код рассчитывает значение строки, содержащее либо «Big!» или «Small!» в зависимости от того, превышает или нет MyNumber
значение 5:
if (MyNumber > 5):
“Big!”
else
“Small!”
Это означает, что вы можете использовать if … else
непосредственно в качестве входных данных функций, вместо того чтобы сохранять результат и использовать его в качестве входных данных.
Несмотря на то, что этот пример простой, в некоторых контекстах эти функции становятся более значительными. Например, циклы вычисляют массивы значений, что позволяет быстро создавать новые массивы на основе существующих.
В следующем коде переменная MyArray
будет содержать все значения меньше 5 из массива NumberArray
.
MyArray : []int = for(Number := NumberArray, Number < 5):
Число
Выражения с возможным отсутствием результата
Выражение с неоднозначным результатом — это выражение, которое может успешно завершиться и вернуть значение или завершиться с ошибкой и не вернуть никакого значения. Выражения с возможным отсутствием результата могут выполняться только в контексте, допускающем неоднозначность, потому что этот контекст будет определять, что происходит в случае, если выражение завершится с ошибкой.
Примеры выражений с неоднозначным результатом включают в себя индексирование массива, поскольку при неправильном индексе произойдёт ошибка, и использование операторов, например, сравнение двух значений. Более подробную информацию о выражениях с неоднозначным результатом в Verse см. в статье Неоднозначность.
Список выражений в Verse
В следующей таблице описаны различные виды выражений в Verse. Перейдите по ссылкам, чтобы узнать больше о каждом выражении.
Выражение | Описание | Это выражение с неоднозначным результатом? |
---|---|---|
Литералы | ||
Вызовы функций | Вызов функции является выражением и может иметь две формы: FunctionName() и FunctionName[] . Тип результата выражения вызова функции определяется в сигнатуре функции. Более подробно см. в разделе Функция. |
Только если вызов функции имеет синтаксис FunctionName[] , а сама функция содержит в определении спецификатор <decides> . |
Сравнение | Выражение сравнения сравнивает два значения с помощью одного из операторов сравнения:
Более подробно об этом рассказано в разделе Операторы. |
Да |
Присваивание | Выражение присваивания сохраняет значение в изменяемом месте, например, при инициализации константы или изменении значения переменной. Более подробно это описано в разделе Переменные и константы. | |
Математическое выражение | Математическое выражение выполняет вычисления с помощью операторов:
У всех этих операторов также есть варианты присваивания, которые можно использовать с указателями. Более подробно об этом рассказано в разделе Операторы. |
Только для целых чисел. |
Решение | В выражении принятия решения используются операторы not , and и or , чтобы программист мог контролировать поток решений об успехе и неудаче. Более подробно об этом рассказано в разделе Операторы. |
Да |
Запрос | В выражении запроса используется оператор ? , и он проверяет, имеет ли переменная типа logic или option значение true . В противном случае выражение не выдаёт результат. Более подробно об этом рассказано в разделе Операторы. |
Да |
Создание экземпляров классов и структур | Создание экземпляра class или struct является выражением. См. Класс и Структура. |
|
Контроль исполнения | Контроль исполнения определяет порядок, в котором компьютер выполняет инструкции. Для изменения этого потока вы можете использовать такие выражения, как
Более подробно об этом рассказано в разделе Контроль исполнения. |
|
Массив | Массив — это контейнер, в котором можно хранить элементы одного типа. Элементы массива располагаются в том порядке, в котором они в нём сохраняются. К элементам можно получить доступ по их позиции в массиве, называемой индексом. См. также Массив. | Только при индексировании массива. |
Кортеж | Кортеж — это контейнер, в котором можно хранить элементы одного или нескольких типов. Элементы кортежа располагаются в том порядке, в котором они в нём сохраняются. К этим элементам можно получить доступ по их позиции в кортеже, называемой индексом. Подробнее об этом рассказано в разделе Кортеж . | |
Ассоциативный массив | Ассоциативный массив — это контейнер, в котором можно хранить значения, связанные с другими значениями, в виде пар «ключ-значение». Переменные в парах «ключ-значение» могут представлять любую комбинацию типов при условии, что ключ имеет тип comparable. Элементы ассоциативного массива располагаются в том порядке, в котором пары «ключ-значение» записываются в ассоциативный массив, и вы можете получить доступ к элементам по их уникальным ключам. Подробнее об этом см. в разделе ассоциативный массив | |
Тип option | Переменная типа option — это контейнер, который может иметь одно значение типа или не иметь его. Подробнее см. в разделе опция (option). | |
Диапазон | Выражения диапазона содержат все числа между двумя заданными значениями с .. между ними (например, 1..5 ), включая эти значения. Выражения диапазона можно использовать только в некоторых конструкциях, например в выражениях for . Более подробно об этом рассказывается в разделе Диапазон. |