Как работают condition и как их можно оптимизировать по нагрузке?
condition
во всех функциях, где они есть исполняются слева-направо. Следующий выполняется только если предыдущий выполнился в true
.
Поэтому condition
надо располагать по возрастанию предполагаемой нагрузки.
Как можно использовать сравнения для оптимизации нагрузки вычислений?
Если у вас большой код, который потребляет много ресурсов, то можно проверять изменились ли нужные для него вводные используя предыдущее значение.
Например, мы все отслеживаемые поля склеили через listCreate
в техническое поле control_field
и проверяем, изменилось ли оно, используя предыдущее значение поля:
=: if(condition: #old.control_field == #control_field; then: $#onfv; else: $calc)
calc: "..."
Если не изменилось, то не вычисляем calc
, а берем предыдущее значение текущего поля.
Cond всегда возвращает?
Есть сахар cond
— он всегда возвращает результат сравнения внутри себя — true
или false
.
В cond
возможны условия и
, или
и группировки ()
:
&&
— и.
||
— или.
Cond
можно использовать внутри функций, а внутри condition
можно не ставить лишнего сравнения:
=: if(condition: cond`$line_1 != 0 || $line_2 != 0`; then: 100; else: 0)
line_1: 10
line_2: 0
// Результат = 100
Если словами, то в этом примере написано: если line_1
неравно 0
или line_2
неравно 0
, то 100
, иначе 0
.
Можно ли использовать cond внутри condition без дополнительного указания = true/false?
Да. condition
помимо сравнений принимают true
или false
:
=: if(condition: $cond; then: 100; else: 0)
cond: if(condition: $line_1 != 0; then: true; else: false)
line_1: 10
// Результат = 100
Как написать условие и?
&&
— и.Как написать условие или?
||
— или.Для чего используются скобки внутри cond?
Для группировки условий:
cond: cond`($A=1 && $B=1) || ($A=2 && $B=2)`
// Означает: A и B равны 1 или A и B равны 2
В какой момент заканчивается выполнение cond?
Когда все условия на одном уровне выполнились в true
:
cond: cond`($A=1 && $B=1) || ($A=2 && $B=2)`
// Здесь выполнение закончится если A=1 и B=1, повторного обращения к A и B не будет