Конструкция IF
 
Автор rdc

Вы можете думать о конструкции блока IF как о вопросе, который требует ответ: TRUE(истина) или FALSE(ложь). Ответ определяет, какие части кода ваша программа будет выполнять. Поскольку компьютеры работают только с числами, вы обрамляют вопрос как условное уравнение, которое приведет либо к 0 для FALSE , либо не равно нолю для TRUE.

Конструкция IF имеет следующие форматы.

If <expression> Then Do something[:Do something]


<expression> - это вопрос, который требует ответа True или False. Если ответ имеет значение True, то есть не False, то выполняется код, следующий после Then. Если ответ является False, то выполняется следующая строка кода.

Вы можете выполнить более одного оператора, после Then, если вы разделите инструкции двоеточием. Все заявления должны быть на одной линии. Проще для такого действия является формат блока кода, как показано ниже.

If <expression> Then
    Do something 1
    Do something 2
    ...
End If


В этом формате если ответ является True, то выполняется следующий блок кода, начиная с 1 оператора выполняя все инструкции до конца, пока END IF не будет достигнуто. После этого программа начнет выполнение кода после End If. Если ответ является False, код в блоке кода пропускается и выполняется код, следующий после End If.

If <expression> Then
    Do something
    ...
Else
    Do something Else
    ...
End If


В этом формате если <expression> имеет значение True , тогда выполняется код после Then. Если ответ является False, то выполняется код, следующий после Else. 

If <expression> Then
    Do something
ElseIf <expression> Then
    Do something
End If


В этом формате если <expression> имеет значение True , тогда выполняется код после Then. Если ответ является False, то проверяется <expression> после ElseIf. Если ElseIf имеет значение True, то выполняется код, следующий после THEN этого ElseIf, в противном случае выполняется код, следующий после End If. Вы можете иметь столько операторов ElseIf, сколько нужно , чтобы охватить достаточно вопросов.

If <expression> Then
    Do something
ElseIf <expression> Then
    Do something
Else
    Do something Else
End If


Этот формат представляет собой сочетание всех других форматов. Если <expression> имеет значение True, выполняется код, следующий после Then. Если ответ является False, то выполняется ElseIf. Если ElseIf имеет значение True, то выполняется код, следующий после THEN этого ElseIf, в противном случае выполняется код, следующий после Else.

Этот формат позволяет вам задать ряд вопросов и если ответ является значением False на все вопросы, вы можете взять по умолчанию курс действий, основанный на блоке Else.

Как вы можете видеть, вы можете сформулировать вопрос в ряде путей и затем выполнить код, основанный на ряде комбинаций ответа. Это дает вам большую гибкость.

<expression>- это вопрос, который нуждается в ответе и вы задаете его с помощью логических операторов.

Вы можете смешивать арифметические и логические операторы, а также скобки, внутри If заявления. Компилятор вычисляет условные операторы слева направо, принимая во внимание приоритет операторов. Например все следующие фрагменты кода являются законными для конструкции IF.

If var1 = 5 Then
If (var1 = 5) And (var2 < 3) Then
If (var1 + 6) > 10 Then


Вы заметили, что скобки используются для группирования различных частей выражений. Выражение должно в конечном итоге разрешаться как True или False, даже если вы используете арифметические операторы в выражении.

Использование битовых операторов в конструкции If


Помните, что операторы And, Or и Not являются битовыми операторами. То есть они возвращают значение, основанное на побитовой операции, которые они выполняют. Вы должны позаботиться при использовании битовых операторов в пределах If заявления чтобы они правильно оценивали результат.

Возьмем второй фрагмент кода, перечисленный выше.

If (var1 = 5) And (var2 < 3) Then


Если var1 равно 5, компилятор будет возвращать значение True, или значение -1 для выражения. Если var2 меньше 3, то компилятор будет возвращать значение True или значение -1 для этого выражения. Затем компилятор будет оценивать оператор AND с двумя выражениями -1 AND -1 , возвращая -1. Так как -1 не равно нулю, или True, будет выполнен код, следующий после Then.

Если любой из операторов в скобках оценивается в 0, то будет возвращено 0, которая имеет значение False, и код, следующий после then будет пропущен. При использовании битовых операторов следует оценка условных выражений по обе стороны битового оператора, таким образом, чтобы они возвращали True или False. Это даст вам последовательные результаты в ваших оценках.

Проблема Not


Логический оператор Not может быть проблемой в IF заявлении. Вы может быть привыкли писать If Not var Then с выполнением не логической, а битовой операции. В FreeBasic NOT выполняет битовую операцию, а не логическую операцию.

Если var должен был содержать значение 3, то Not 3 будет равно -4, и это значение будет расценено как результат TRUE. В итоге код после THEN будет выполнен, что вероятно станет не тем, что вы ожидаете. Вместо того, чтобы писать If Not var Then запишите  If var <> 0 Then , что будет правильным по смыслу и по результату.

Перекрывание условий


При использовании сложных условий необходимо обеспечить, что условия не перекрывались. В большинстве случаев дублирование условий будет приводить к непредсказуемым результатам. Каждое условие должно иметь уникальный результат , и сочетание отдельных результатов должно выражать уникальный результат. Это очень важно в конструкции If-ElseIf; перекрывающиеся условия в блоке If-ElseIf могут выполнять неправильный код в самое неподходящее время.

Вложенные заявления If


Иногда может оказаться необходимым для вложенных IF заявлений , чтобы лучше описать процесс оценки. Если нужно обрабатывать несколько аргументов в выражении, есть моменты, когда вы можете проверить определенные диапазоны значений с помощью вложенных условий.

If <expression> Then 
    <statement>
    ...
    If <expression> Then
        <statement>
        <statement>
        ...
    End If
End If


Важно закрывать открытые блоки IF конструкцией END IF во избежание ошибок. Чтобы это лучше сделать , удобно использовать отступы. В приведенном выше примере вложенный блок if-endif сделан как раз с отступом.

Функция IIF


Функция IIF, или "непосредственный If" возвращает одно из двух числовых значений на основе выражения. Вы можете думать о IIF как о однолинейном операторе IF , который действует как вызов функции.

Value = IIf(<expression>, numeric_value_if_true, numeric_value_if_false)


IIf можно использовать как автономные функции или внутри других выражений, где вы не хотите разделять выражение вставками оператора If. Числовые значения могут быть константами, переменными или вызовами числовых функций. Ограничение функции заключается в том, что он будет возвращать только числовое значение, а не строковое значение, однако это ограничение можно обойти с помощью указателей.

Инструкции Iif будет оценивать как истинное или ложное условие, поэтому необходимо заботиться о том, чтобы вы не выполнили недопустимую операцию, такую как деление на ноль, даже если это условие не возвращается из функции.


Обрамление вопроса


Заявление IF - это мощный инструмент, но вы должны убедиться, что вы правильно обрамляете вопрос. Каждое выражение должно приводить к TRUE или FALSE, с выполнением кода, следующим за THEN.

При написании If заявления вы должны спросить себя, создает ли это выражение TRUE или FALSE? Это особенно верно для составных выражений, которые имеют целый ряд терминов в выражении. Каждый термин должен разрешить значение True или False и сумма условий так же должна разрешать значение True или False. Если есть сомнения о правильности оценки составных выражений, разбейте его на вложенные IF заявления.

Проверка значений диапазона


Часто вам нужно будет проверить диапазон значений внутри If заявления, и чтобы компилятор правильно оценивал состояние диапазона, необходимо правильно кадрировать выражения. Существуют в основном два типа диапазонов выражений: эксклюзивный и инклюзивный. Эксклюзивный диапазон выражений исключает диапазон значений. Инклюзивный диапазон выражений включают в себя целый ряд значений. Каждый имеет определенный формат, который необходимо соблюдать для надлежащей оценки.

Исключение диапазона значений

Предположим, что у вас есть диапазон значений, и вы хотите сделать что-то особенное, если значение меньше или равно 1 или значение больше или равно 10. Чтобы поместить этот другой путь, вы хотите исключить цифры 2-9 из специальных действий.

Можно сформулировать это как вопросы, которые затем могут быть переведены в код.

Значение числа меньше или равно 1 OR(или) число больше или равно 10?
If(если) да, Then(тогда) сделать определенные действия.
If(если) нет, Then(тогда) сделать стандартные действия.


Ключевым здесь является OR. Если нижняя граница значения равна или меньше чем 1 OR верхняя граница значения равна или больше 10, то сделать специальные действия.

If (value <= 1) Or (value >= 10) Then
    do_special
Else
    do_standard
End If


Помните, что OR будет возвращать значение True, если одно условие имеет значение True. Если значение равно 1 или меньше 1, или значение равно 10 или более, то выражение вернет значение True и специальные действия будут выполняться.

Включение диапазона значений

Включение является противоположностью исключения. Оператор AND является противоположностью оператора OR.

Предположим, что вы хотите сделать что-то особенное, если значение равно 5, 6 или 7. То есть вы хотите включить эти числа в пределах диапазона выражения. Опять же вы можете начать, задавая вопрос.

Значение числа между 5 And(и) 7 (включительно)?
If(если) да, Then(тогда) сделать определенные действия.
If(если) нет, Then(тогда) сделать стандартные действия.



Здесь необходимо включить числа 5, 6, 7 для рассмотрения. Если значение равно 5 или больше и значение равно 7 или меньше то делать что-то особенное. Это приводит к в следующему фрагменту кода.

If (value >= 5) And (value <= 7) Then
    do_special
Else
    do_standard
End If


Помните, что оператор AND возвращает True, если оба операнда возвращает True. Если значение равно 5 или больше чем 5 , а так же меньше или равно чем 7, то оба заявления являются True и выражение имеет значение True.