Как правильно создать условие 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