Как правильно создать условие If ... EndIf
Эти примеры покажут как правильно создавать условия, повышая быстродействие и компактность записи. Быстродействие можно заметить в циклах при повторении операций несколько тысяч раз. Следует учитывать, что условие заданное выражением оператора If может иметь только два логических состояния Да=1=True или Нет=0=False. Значение 0 или пустая строка "" интерпретируются как Нет=0=False, все остальные положительные или отрицательные числа или не пустая строка интерпретируются как Да=1=True. Приоритет операторов в выражении смотрите в разделе "Операторы"
Избавление от вложенности условий
If k = 8
If z = 5
End
EndIf
EndIf
; Заменить на одно условие
If k = 8 And z = 5
End
EndIf
Последовательное условие с одинаковым результатом
If k = 8
End
EndIf
If z = 5
End
EndIf
; Заменить на одно условие
If k = 8 Or z = 5
End
EndIf
Излишнее приравнивание. Вычисляется верность условия 1=1 (верно, и результат 1) или 0=1 (не верно, и результат 0), но возврат успешности функции DeleteFile() уже является результатом верности.
If DeleteFile(Path$) = 1
; Заменить на
If DeleteFile(Path$)
Аналогично предыдущему. Условие заданное выражением оператора If является одним из двух значения "Да" или "Нет", при этом число 0 приравнивается к Нет=0=False, все остальные значения приравниваются к Да=1=True
If DeleteFile(Path$)<>0
; Заменить на
If DeleteFile(Path$)
Аналогично предыдущему. Пустая строка "" приравнивается к Нет=0=False, "не пустая строка" приравнивается к Да=1=True
If String$ <> ""
; Заменить на
If String$
If Asc(String$)
Сравнение одного значения с несколькими значениями. Вариант с оператором Select возможно работает быстрее, по крайней мере код читабельней.
If k = 3 Or k = 8 Or k = 12 Or k = 43 Or k = 67
; Заменить на
Select k
Case 3, 8, 12, 43, 67
End
EndSelect
Инвертирование
If DeleteFile(Path$) = 0
; Заменить на
If Not DeleteFile(Path$)
Инвертирование с перестановкой блоков
If Not Asc(Path$)
End
Else
FileDelete(Path$)
EndIf
; Заменить на
If Asc(Path$)
FileDelete(Path$)
Else
End
EndIf
Примеры аналогов
If k <> 12
If k - 12
Примеры аналогов
If a <> 3 And b <> 5 And c <> 7
If Not (a = 3 Or b = 5 Or c = 7)
Диапазоны
If k >= 2 And k <= 8
k = 3
EndIf
; Аналогично
Select k
Case 2 To 8
k = 3
EndSelect
Выйти из условия. Если у вас сложное условие, содержащее множество вложенных условий и на разных участках кода проверятся валидность данных, при которых необходимо выйти из условия, то чтобы не усложнять условие блоками можно вставить условие в одношаговый цикл и использовать Break
Repeat
If Trg
; ... много кода
cg = ClipGet()
If cg = "Завершить" : Break : EndIf
; ... много кода
End
EndIf
Break
Forever
Неверная конструкция, когда одно и тоже значение сравнивается многократно. Это логически не верно, и медленно, если используется в цикле и при значительном вычислении выражения в условии. Select в данной конструкции будет вычислять до первого совпадения.
If n = 5 : n = 15 : EndIf
If n = 3 : n = 33 : EndIf
If n = 8 : n = 23 : EndIf
; Заменить на
Select n
Case 5
n = 15
Case 3
n = 33
Case 8
n = 23
EndSelect