# Условия

Оператор `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 %}

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

Если [опция](/ru/editor/options/general.md#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`

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

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

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

{% hint style="info" %}
[Опция](/ru/editor/options/general.md#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` называются операндами. Компилятор может самостоятельно определить нужный опкод, если один из операндов является числовой константой, [строковым литералом](/ru/coding/data-types.md#strokovye-literaly) или [тип](/ru/coding/variables.md#konstrukciya-var-end) обеих переменных известен.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sannybuilder.com/ru/coding/conditions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
