Операторы
В выражениях можно использовать следующие операторы:
Арифметические операторы
Оператор | Результат для чисел | Результат для строк | Результат для булева выражения |
---|---|---|---|
+ | Сложение | Сочленение | Логическое 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.