Операторы

В выражениях можно использовать следующие операторы:

Арифметические операторы

Оператор Результат для чисел Результат для строк Результат для булева выражения
+ Сложение Сочленение Логическое OR
- Вычитание Недопустимая операция Логическое OR инвертированное
* Умножение Недопустимая операция Логическое AND
/ Деление Недопустимая операция Логическое AND инвертированное
% Модуль1 Недопустимая операция *
^ Степенная *1 *

1Оператор % (модуль) рассчитывает остаток после деления. Например 12 % 10 = 2. Когда вы учились в школе, вы, вероятно, работали с таким утверждением как "12 поделенное на 10 равняется 1 с остатком 2" Точно также 20 % 10 равно нулю, поскольку остатка нет.

Операторы сравнения

Знак Оператор
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно
= Равно
!= Не равно

Если типы выражений справа и слева различны, тип выражения справа будет преобразован в тип выражения слева прежде, чем будет выполнено сравнение. Операции сравнения дают в результате булеву переменную.

Поддерживаются следующие проверки диапазона:

(expr) (comparison operator1) (expr) (comparison operator2) (expr)

Где оба оператора сравнения меньше (или равны) или больше (или равны), но не оба.

Меньше чем или равно

a<b<c
например: 2<x<3 возвращает true if x больше чем 2 но меньше чем 3

a<=b<c
например: 2<=x<3 возвращает true if x больше чем или равно 2 но меньше чем 3

a<b<=c

например: 2<x<=3 возвращает true if x больше чем 2 но меньше чем или равно 3

a<=b<=c
например: 2<=x<=3 возвращает true if x больше чем или равно 2 и меньше чем или равно 3

Больше чем или равно

a>b>c
например: 2>x>3 возвращает true if x меньше чем 2 но больше чем 3

a>=b>c
например: 2>=x>3 возвращает true if x меньше чем или равно 2 но больше чем 3

a>b>=c
например: 2>x>=3 возвращает true if x is less than 2 но больше чем или равно 3

a>=b>=c
например: 2>=x>=3 возвращает true if x меньше чем или равно 2 и больше чем или равнo 3

Оператор имеет тот же приоритет, что и обычные операторы сравнения, поэтому:

2<=2+1<4

расценивается как True.

Логические операторы

Знак Оператор
& Логическое AND
| Логическое OR
! Логическое NOT (т.е. НЕ)

В следующем примере Логический оператор ИЛИ (вертикальная черта) используется в выражении поля для определения фильтра. Если запись содержит либо 1, либо 2, либо 3 в поле BLOCK, тогда запись проходит через фильтр.

=[BLOCK] = "1" | [BLOCK] = "2" | [BLOCK] = "3"

То же выражение можно записать более кратко, используя функцию В (IN):

=IN([BLOCK], "1", "2", "3")

Условные операторы

Анализатор выражения содержит условный оператор 'if'. Он имеет следующую синтаксическую структуру:

if <предикат> then <выражение_верное> elseif|elif <предикат> then <выражение_верное> else <выражение_неверное> endif|fi

Часть оператора elsif|elif может повторяться или полностью пропускаться. Логика в том, чтобы оценивать предикаты пока не будет найден один TRUE, после чего оценивать соответствующее <выражение_верное>. Если ни один предикат не оценивается TRUE, тогда оценивается <выражение_неверное>, и выдается как результат.

Вы можете использовать оператор 'if' следующим образом:

MCAF + if RECOVERY > 0,5 then MCAF * 2 else 0 fi

Иными словами, если RECOVERY (т.е. ИЗВЛЕЧЕНИЕ) больше, чем 0,5, тогда прибавляем MCAF (поправочный коэффициент затрат на добычу) * 2 к MCAF, в ином случае прибавляем 0 (ничего).

Операторы преобразования типов

Полученный в результате тип выражения определяется типом первого операнда. Однако, это не всегда удобно, потому что:

=[RL] + "m"

даст неожиданный результат.

В этих случаях удобно использовать унарный оператор “#”, который можно применять для преобразования в строка операнда, условия или выражения. Поэтому:

=#[RL] + "m"

дает корректный результат.

Несколько примеров приведены в таблице ниже:

=3 + 4 производит число 7, в то время как:
=#(3 + 4) производит текст "7" и:
=#3 + 4 производит текст "34", где 3 и 4 просто связываются.

Если не утверждается обратное, тип выражения справа будет преобразован в тип выражения слева перед тем, как будет выполнена операция.

То есть "5,05" будет (сочлененным) результатом “5,0” + 5, а 10 будет (арифметическим) результатом 5,0 + “5”.

Литеральные константы имеют преимущество при определении типа контекста. Например:

=2 + "3"

оценивается как 5, но если A это переменная со значением 2,

=A + “3”

оценивается как 23.