Глава 3 · Выражения и операции
Выражения
Правая часть присваивания, аргумент функции, выводимое значение и условие выбора ветви — всё это места, где требуется вычислить результат. Запись, которая описывает такое вычисление и даёт значение определённого типа, называется выражением.
Литералы, имена и операции
Литерал записывает значение непосредственно, например 3, "Текст" или TRUE; имя переменной читает её текущее значение. Операция получает один или два операнда — выражения, над которыми выполняется действие: в count + 2 операндами сложения служат значение переменной и число 2.
Скобки объединяют часть выражения и меняют порядок действий. В следующем примере сначала выполняется сложение, затем умножение:
DIM count AS INTEGER = 3
DIM total AS INTEGER = (count + 2) * 4
PRINT total
Результат:
20
Без скобок count + 2 * 4 сначала вычисляет произведение. Приоритет каждой операции приведён в таблице порядка вычисления.
Вызовы, элементы массивов и поля
Помимо литералов, имён и операций, в выражение входят вызовы функций, обращения к элементам массива и полям записи. Запись name(...) может означать вызов или индексирование — действие определяется объявлением имени; создание пользовательской записи также имеет собственные формы.
Тип результата и место использования
Тип выражения определяется его частями и выполняемой операцией: сравнение возвращает BOOLEAN, соединение строк — STRING. Результат должен быть совместим с типом получателя или аргумента. Числовые выражения, строковые операции и допустимые типы операндов описаны в статье «Операции и порядок вычисления».
Условие IF принимает только BOOLEAN, поэтому количество проверяется сравнением count > 0: само число не означает истину или ложь. Допустимые переходы между типами приведены в статье о преобразованиях.
Отдельная инструкция с выражением должна целиком быть вызовом процедуры, функции или метода; результат функции в такой инструкции не используется. После синтаксического разбора выражение, которое не является вызовом, отклоняется с MB2040, поэтому (Value() + 1) не становится допустимой инструкцией из-за вызова внутри скобок. Подробности приведены в статье о вызовах.