Модульні уроки (1/5)
оператори if, else та init
У Go синтаксис if класичний, але з двома важливими відмінностями
порівняно з C/Java: без дужок навколо умови та
можливість оголосити тимчасову змінну безпосередньо в if
(інструкція init).
Основний синтаксис
if temperatura > 30 {
fmt.Println("caldo")
} else if temperatura > 20 {
fmt.Println("mite")
} else {
fmt.Println("fresco")
}Діжки є обов’язковими навіть для однорядкових блоків. The
умова має бути типу bool: жодної "правдивості", як Python або JS.
n := 0
// if n { ... } // ERRORE: int non è bool
if n != 0 { ... } // okОператор ініціалізації: область обмежена if
Ви можете оголосити дійсну змінну лише всередині if/else,
відокремлюючи його від умови за допомогою ;:
if v, err := call(); err == nil {
fmt.Println("ok", v)
} else {
fmt.Println("ko", err)
}
// qui v ed err NON esistono piùЦе ідіоматичний шаблон для обробки помилок без забруднення зовнішньої області.
Затінення в області if
Якщо зовнішня змінна "затінена" під час ініціалізації, всередині якщо виграє локальна версія. Відразу після цього знову з'являється зовнішня.
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 рядки — це вибір дизайну, щоб сприяти читабельності.
var label string
if age >= 18 {
label = "adulto"
} else {
label = "minore"
}Спробуйте
Вивести 'positivo', 'zero' або 'negativo' залежно від значення n.
Показати підказку
`if / else if / else` ланцюжок з умовами на знаку.
Рішення доступне після 3 спроб
Використовуйте оператор init, щоб оголосити v := 42 у if і надрукувати його, лише якщо v >= 18.
Показати підказку
Синтаксис: `if init; умова { ... }`.
Рішення доступне після 3 спроб
Що друкує ця програма?
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.