Эти примеры покажут как правильно создавать условия, повышая быстродействие и компактность записи. Быстродействие можно заметить в циклах при повторении операций несколько тысяч раз. Следует учитывать, что условие заданное выражением между операторами If и Then может иметь только два логических состояния Да=1=True или Нет=0=False. Значение 0 или пустая строка "" интерпретируются как Нет=0=False, все остальные положительные или отрицательные числа или не пустая строка интерпретируются как Да=1=True. Приоритет операторов в выражении смотрите в разделе "Операторы"
Избавление от вложенности условий
If$k=8Then If$z=5Then Exit EndIf
EndIf
; Заменить на одно условие If$k=8And$z=5Then Exit
EndIf
Последовательное условие с одинаковым результатом
If$k=8Then Exit
EndIf
If$z=5Then Exit
EndIf
; Заменить на одно условие If$k=8Or$z=5Then Exit
EndIf
Излишнее приравнивание. Вычисляется верность условия 1=1 (верно, и результат 1) или 0=1 (не верно, и результат 0), но возврат успешности функции FileExists уже является результатом верности.
IfFileExists($path) =1Then Exit ; Заменить на IfFileExists($path)Then Exit
Аналогично предыдущему. Условие заданное выражением между операторами If и Then является одним из двух значения "Да" или "Нет", при этом число 0 приравнивается к Нет=0=False, все остальные значения приравниваются к Да=1=True
If@error<>0Then Exit ; Заменить на If@errorThen Exit
Аналогично предыдущему. Пустая строка "" приравнивается к Нет=0=False, "не пустая строка" приравнивается к Да=1=True
If$sString<>''Then Exit ; Заменить на If$sStringThen Exit
Сравнение одного значения с несколькими значениями. Вариант с оператором Switch работает быстрее.
If$k=3Or$k=8Or$k=12Or$k=43Or$k=67Then Exit
; Заменить на Switch$k Case3,8,12,43,67 Exit
EndSwitch
Инвертирование
IfFileExists($path) =0Then Exit ; Заменить на If NotFileExists($path)Then Exit
Инвертирование с перестановкой блоков
If NotFileExists($sPath)Then Exit
Else FileDelete($sPath) EndIf
; Заменить на IfFileExists($sPath)Then FileDelete($sPath) Else Exit
EndIf
Примеры аналогов
If$k<>12Then
If$k-12Then
Примеры аналогов
If$a<>3And$b<>5And$c<>7Then
If Not($a=3Or$b=5Or$c=7)Then
Диапазоны
If$k>=2And$k<=8Then $k=3 EndIf
; Аналогично Switch$k Case2To8 $k=3 EndSwitch
Выйти из условия. Если у вас сложное условие, содержащее множество вложенных условий и на разных участках кода проверятся валидность данных, при которых необходимо выйти из условия, то чтобы не усложнять условие блоками можно вставить условие в одношаговый цикл и использовать ExitLoop
Do If$TrgThen ; ... много кода $cg=ClipGet() If$cg='Завершить'Then ExitLoop ; ... много кода Exit EndIf
Until1
Неверная конструкция, когда одно и тоже значение сравнивается многократно. Это логически не верно, и медленно, если используется в цикле и при значительном вычислении выражения в условии. Switch в данной конструкции будет вычислять до первого совпадения.