Перейти до основного вмісту
Модуль 2 · Урок 1 із 56/50 у курсі~10 min
Модульні уроки (1/5)

оператори if, else та init

У Go синтаксис if класичний, але з двома важливими відмінностями порівняно з C/Java: без дужок навколо умови та можливість оголосити тимчасову змінну безпосередньо в if (інструкція init).

Основний синтаксис

Go
if temperatura > 30 {
    fmt.Println("caldo")
} else if temperatura > 20 {
    fmt.Println("mite")
} else {
    fmt.Println("fresco")
}

Діжки є обов’язковими навіть для однорядкових блоків. The умова має бути типу bool: жодної "правдивості", як Python або JS.

Go
n := 0
// if n { ... }   // ERRORE: int non è bool
if n != 0 { ... }  // ok

Оператор ініціалізації: область обмежена if

Ви можете оголосити дійсну змінну лише всередині if/else, відокремлюючи його від умови за допомогою ;:

Go
if v, err := call(); err == nil {
    fmt.Println("ok", v)
} else {
    fmt.Println("ko", err)
}
// qui v ed err NON esistono più

Це ідіоматичний шаблон для обробки помилок без забруднення зовнішньої області.

Затінення в області if

Якщо зовнішня змінна "затінена" під час ініціалізації, всередині якщо виграє локальна версія. Відразу після цього знову з'являється зовнішня.

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)  // mai stampato (3 < 5)
} else {
    fmt.Println("else:", x)    // 3
}
fmt.Println("dopo:", x)         // 10 — quella esterna

Немає тернарного оператора

Go не має cond ? a : b. Для умовних призначень потрібен if/else у 3-4 рядки — це вибір дизайну, щоб сприяти читабельності.

Go
var label string
if age >= 18 {
    label = "adulto"
} else {
    label = "minore"
}

Спробуйте

вправи#go.m2.l1.e1
Спроби: 0Завантаження…

Вивести 'positivo', 'zero' або 'negativo' залежно від значення n.

Завантаження редактора…
Показати підказку

`if / else if / else` ланцюжок з умовами на знаку.

Рішення доступне після 3 спроб

вправи#go.m2.l1.e2
Спроби: 0Завантаження…

Використовуйте оператор init, щоб оголосити v := 42 у if і надрукувати його, лише якщо v >= 18.

Завантаження редактора…
Показати підказку

Синтаксис: `if init; умова { ... }`.

Рішення доступне після 3 спроб

Quiz#go.m2.l1.e3
Готовий

Що друкує ця програма?

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
Варіанти відповідей

Підведення підсумків

  • Умови без дужок, дужки завжди обов'язкові.
  • Умова має бути bool: відсутність неявної правдивості.
  • Ініціалізація if v, err := f(); err == nil { ... } обмежує область дії v та err.
  • Затінення в init: будьте обережні, щоб не затіняти зовнішні змінні.
  • Без трійкового коду: напишіть розширений if/else.