Lekcje modułu (1/5)
if, else i instrukcje inicjujące
W Go składnia if jest klasyczna, ale ma dwie ważne różnice
w porównaniu do C/Java: brak nawiasów wokół warunku i
możliwość zadeklarowania zmiennej tymczasowej bezpośrednio w if
(instrukcja inicjująca).
Podstawowa składnia
if temperatura > 30 {
fmt.Println("caldo")
} else if temperatura > 20 {
fmt.Println("mite")
} else {
fmt.Println("fresco")
}Nawiasy klamrowe są obowiązkowe, nawet w przypadku bloków jednowierszowych. The
warunek musi być typu bool: brak „prawdziwości” jak Python czy JS.
n := 0
// if n { ... } // ERRORE: int non è bool
if n != 0 { ... } // okInstrukcja init: zakres ograniczony do if
Możesz zadeklarować zmienną prawidłową tylko wewnątrz if/else,
oddzielając go od warunku za pomocą ;:
if v, err := call(); err == nil {
fmt.Println("ok", v)
} else {
fmt.Println("ko", err)
}
// qui v ed err NON esistono piùJest to idiomatyczny wzorzec obsługi błędów bez zanieczyszczania zakresu zewnętrznego.
Cieniowanie w zakresie if
Jeśli zmienna zewnętrzna zostanie „zacieniona” przez init, wewnątrz jeśli wygra wersja lokalna. Zaraz potem pojawia się ponownie ten zewnętrzny.
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 esternaBrak operatora trójskładnikowego
Go nie ma cond ? a : b. Do przypisań warunkowych potrzebny jest kod if/else
w 3-4 liniach — jest to wybór projektowy sprzyjający czytelności.
var label string
if age >= 18 {
label = "adulto"
} else {
label = "minore"
}Spróbuj
Wypisz „positivo”, „zero” lub „negativo” w zależności od wartości n.
Pokaż wskazówkę
Łańcuch `if / else if / else` z warunkami na znaku.
Rozwiązanie dostępne po 3 próbach
Użyj instrukcji init, aby zadeklarować v := 42 w if i wypisz ją tylko wtedy, gdy v >= 18.
Pokaż wskazówkę
Składnia: `if init; condition { ... }`.
Rozwiązanie dostępne po 3 próbach
Co drukuje ten program?
x := 10
if x := 3; x > 5 {
fmt.Println("dentro:", x)
} else {
fmt.Println("else:", x)
}
fmt.Println("dopo:", x)Podsumowanie
- Warunki bez nawiasów, nawiasy klamrowe są zawsze obowiązkowe.
- Warunek musi mieć wartość
bool: brak ukrytej prawdziwości. - Init
if v, err := f(); err == nil { ... }ogranicza zakresvierr. - Cieniowanie w init: uważaj, aby nie zacieniać zmiennych zewnętrznych.
- Bez trójskładnikowego: napisz rozszerzony
if/else.