# Условия

Оператор `IF` объединяет одно или несколько условий и создает новое ветвление в коде.

## Общий синтаксис условных выражений

`00D6: if <N>`\
&#x20; `<условие 1>`\
&#x20; `<условие 2>`\
`...`\
&#x20; `<условие N+1>`\
`004D: jump_if_false <метка>`

`N` означает общее кол-во условий внутри выражения `IF` и логическую связь между ними:

| N      | Кол-во условий | Логический оператор                                                                |
| ------ | -------------- | ---------------------------------------------------------------------------------- |
| 0      | 1              | нет (выражение истинно, если условие в нем истинно)                                |
| 1..7   | 2..8           | `И` (все условия должны быть истинны, чтобы все выражение было истинно)            |
| 21..27 | 2..8           | `ИЛИ` (хотя бы одно условие должен быть истинно, чтобы все выражение было истинно) |

{% hint style="info" %}
В одном выражении `IF` может объединяться до 8 условий.&#x20;
{% endhint %}

{% hint style="info" %}
Sanny Builder позволяет не указывать`0` после `IF. IF 0` и  `IF` эквивалентны.
{% endhint %}

`<метка>`- имя [метки](https://docs.sannybuilder.com/ru/data-types#metki), на которую переходит скрипт, если выражение `IF` ложно.\
`<условие>` - любой условный опкод, который возвращает `true` или `false`&#x20;

Если [опция](https://docs.sannybuilder.com/ru/editor/options/general#proverka-uslovii)  `Проверка условий` включена, после `IF` можно писать ключевые слова `AND` или `OR`. Компилятор будет рассчитывать правильное значение самостоятельно:

```
if and 
    $var > 0
    $var2 == 10.0
jf @anywhere
```

В данном примере компилятор запишет вместо `and` число  `1`.

`IF AND` - условия, объединенные логическим оператором `И` (замена `if 1..7`)\
`IF OR` - условия, объединенные логическим оператором `ИЛИ` (замена `if 21..27`)

## Высокоуровневые конструкции

Для облегчения работы с условными выражениями существуют высокоуровневые конструкции, для которых не нужны дополнительные метки в коде:

`IF <N>/AND/OR`\
&#x20; `<условие 1>`\
&#x20; `<условие 2>`\
&#x20; `...`\
&#x20; `<условие N+1>`\
`THEN`\
&#x20; `<команды при истинности условия>`\
`END`&#x20;

`IF <N>/AND/OR`\
&#x20; `<условие 1>`\
&#x20; `<условие 2>`\
&#x20; `...`\
&#x20; `<условие N+1>`\
`THEN`\
&#x20; `<команды при истинности условия>`\
`ELSE`\
&#x20; `<команды при ложности условия>`\
`END`

Условное выражение создается по [общим правилам](#obshii-sintaksis-uslovnykh-vyrazhenii). После ключевого слова `THEN` указываются опкоды, которые должны выполняться, если условие истинно. После `ELSE` указываются опкоды, которые выполняются, если условие ложно.&#x20;

Выражение `IF` завершается ключевым словом `END`.

```
if $var == 5
then
    Inc($var)
else
    Dec($var)
end
```

{% hint style="info" %}
[Опция](https://docs.sannybuilder.com/ru/editor/options/general#proverka-uslovii) `Проверка условий` должна быть включена.
{% endhint %}

{% hint style="info" %}
Допускаются конструкции IF, вложенные друг в друга.
{% endhint %}

## Операторы сравнения

* a **`==`** b - a равно b&#x20;
* &#x61;**`>=`** b - a больше либо равно b&#x20;
* a **`>`** b - a больше b&#x20;
* a **`<`** b - a меньше b&#x20;
* a **`<=`** b - a меньше либо равно b&#x20;
* a **`<>`** b - a не равно b

`a` и `b` называются операндами. Компилятор может самостоятельно определить нужный опкод, если один из операндов является числовой константой, [строковым литералом](https://docs.sannybuilder.com/ru/data-types#strokovye-literaly) или [тип](https://docs.sannybuilder.com/ru/variables#konstrukciya-var-end) обеих переменных известен.
