Конструкция IIF(<условие/выражение>, <результат1>, <результат2>), которая возвращает результат1 или результат2 в зависимости от результата условия (выражения), весьма полезна и иной раз помогает сократить код, часто даже делая его более читаемым. Однако при использовании в ней вызова функций следует знать одну особенность: ВСЕ выражения в этой конструкции вычисляются (QSP 5.7.0).
Допустим, нужно рассчитать значение переменной B по формуле B=1/A. Само собой, нельзя допустить, чтобы в эту формулу попала А, равная 0.
Использовать конструкцию IIF в данном случае, увы, не получится.
A = 0 B = IIF(A=0, 0, 1/A)
Плеер QSP 5.7.0 выдаст сообщение об ошибке — делении на 0, потому что он сперва попытается рассчитать все выражения: A=0, 0 и 1/A, а потом уже выбрать значение, согласно условию.
Поэтому в данной ситуации приходится использовать старое доброе IF … ELSE … END:
A = 0 if A=0: B=0 else B=1/A end
Неактивен
Это связано с тем, что для функций все аргументы вычисляются до их вызова.
Возможно, для IIF стоит сделать исключение в будущих версиях QSP.
Неактивен