# if/else розгалуження

## if...else

Ми вміємо виводити на екран (console.log), отримувати інформацію від людини (prompt) і зберігати дані в змінних. Ми ще не вміємо вчити комп'ютер самостійно вирішувати що йому робити, спираючись на наявні дані.

Загалом, іноді, в залежності від умови, потрібно виконати різні дії. Наприклад: **якщо** на вулиці холодно, **то** тепліше одягнутися, **інакше** піти гуляти як є.

Для цього є оператор `if`, наприклад:

```javascript
let temp = prompt("Яка на вулиці температура?");
if (temp < 5) {
    console.log("Одягни :) шапку!");
}
```

### Оператор if

Оператор if («якщо») отримує умову, в прикладі вище це `temp <5` Комп'ютер обчислює умову, і якщо результат - **так** (правда, `true`), то виконує команду, а якщо результат - ні (неправда, `false`), то просто пропускає команду.

Якщо за істинної умови потрібно виконати більше однієї команди - вони оформлюються блоком коду в фігурних дужках:

```javascript
if (temp < 5) {
    console.log("Будь ласка..");
    console.log("..одягни шапку!");
}
```

Зараз спробуйте навчити програму писати текст "оооо тепло", якщо температура більше 4х градусів. Для цього використовуйте оператор `>` (означає як `більше`)

Вийшло? Йдемо далі.

### Невірна умова, else

Цей блок потрібно писати, якщо є необхідність. Блок else («інакше») виконується, якщо умова невірна:

```javascript
let temp = prompt("Яка температура на вулиці?");

if (temp < 5) {
    console.log("Шапка!");
} else {
    console.log("Норм)"); // будь-яке значення, яке не менше 5
}
```

### Що можна розміщувати всередині блоків { } ?

Все що завгодно! Включаючи інші умови!

```
якщо (я хочу їсти) то {
    якщо (у мене багато коштів) то {
        зайти в ресторан
        замовити їжі
    }
    інакше {
        сходити в магазин
        приготувати собі їжі
    }
    // на цьому етапі роботи програми їжа точно поруч з вами
    поїсти
}
інакше {
    якщо (я давно не їв) {
        покачати прес
        повіджиматися
    }
}
```

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

```javascript
 == - дорівнює (так, саме два значка, НЕ ОДИН)
 != - не дорівнює
 >  - більше
 <  - менше
 >= - більше або дорівнює
 <= - менше або дорівнює
```

У програмуванні ми завжди щось з чимось порівнюємо.

Людською мовою:

```javascript
спочатку запитай скільки у людини грошей
потім, якщо більше 10, то сказати "круто!"
```

Комп'ютерною мовою `більше 10` - це дещо дивна нелогічна умова. Треба **щось** порівняти з **чимось**.&#x20;

Ось як для комп'ютера **правильно**:

```javascript
if (d > 10) ...
```

Ось як для комп'ютера **неправильно**:

```javascript
if (10) ...

// або

if (> 10) ...
```

## Питання

Що буде, якщо переплутати команди місцями?

```javascript
let a
if (a == 10) {
   console.log("А дорівнює 10");
}
a = prompt("введи число");
```

Що буде, якщо замість `==` писати `=`? наприклад ось:

```javascript
let a = 0;
if (a = 10) { // написали = 10 , а не == 10
    console.log("wow");
}
```

і ще таке спробуйте відразу:

```javascript
let a = 10;
if (a = 0) {
    console.log("wow!!!");
}
```

Чому так виходить? Якщо не знаєте відповіді - **не страшно, але просто не використовуйте `присвоїти` всередині умов**. Під кінець курсу можете запитати у волонтерів, чому це відбувається.

Тепер ви розумієте: є `дорівнює` (`==`), а є `присвоїти` (`=`) Не використовуйте присвоєння всередині умов.

А що буде тут?

```javascript
let a = prompt("введи число");
if (a == 10);
   console.log("А дорівнює ...");
   console.log("... десять!");
```

Щоб такого лиха не виникало, візьміть за правило: завжди використовувати фігурні дужки: `if (...) { ... }` (щоб явно виділити блок коду, який виконується за умовою)

Ще, вгадайте, що буде:

```javascript
if (3 < 2 < 4) {
    console.log("da");
}
```

...і більше ніколи не намагайтеся написати потрійне порівняння. Чудово буде, якщо ви розберетеся, чому код так працює.

### Порівняння рядків

До речі! Рядки теж можна порівнювати

```javascript
let a = prompt("Введи своє ім'я");
let b = prompt("Введи ім'я свого товариша");
if (a == b) {
    console.log("ВАУ");
}
```

### Логічні оператори

Про логічні оператори - і, або, не (`&&`, `||`, `!`) - читайте в матеріалах. Обов'язково.

### Оператори == і ===

Про різницю між ними ви можете прочитати в інтернеті

## Додаткові матеріали

[Умовне розгалуження (тернарний оператор)](https://uk.javascript.info/ifelse) *(uk.javascript.info)*

[Ще про тернарний оператор](/zero/tutorials/nagadaiki-poyasnyaiki.md#ternarnii-operator) *(Ш++)*

[Оператори порівняння](https://uk.javascript.info/comparison) *(uk.javascript.info)*

[Логічні оператори](https://uk.javascript.info/logical-operators) *(uk.javascript.info)*

[Про скорочення перевірок змінних boolean](/zero/tutorials/nagadaiki-poyasnyaiki.md#boolean) *(Ш++)*

{% embed url="<https://www.youtube.com/watch?v=tFyRhDZgHaU>" %}

{% embed url="<https://youtu.be/oSO_StIWaXM>" %}

## Обов'язкові задачі

{% content-ref url="/pages/54mcvGefg98lgUnr3Ida" %}
[Км/день-1](/zero/tutorials/if-else/km-day-1.md)
{% endcontent-ref %}

{% content-ref url="/pages/LQaM3cafTCyZ04Wv899z" %}
[Км/день-2](/zero/tutorials/if-else/km-day-2.md)
{% endcontent-ref %}

{% content-ref url="/pages/ciUUfxoLfUvkYFiwsWNT" %}
[Ліфт Empire State Building](/zero/tutorials/if-else/empire-state-building-lift.md)
{% endcontent-ref %}

*Виникли питання або труднощі?* [*Зверніться за допомогою до Ш++.*](/zero/arrangements/support.md)


---

# 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://shpp.gitbook.io/zero/tutorials/if-else.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.
