Przejdź do głównej treści
eLearner.app
Moduł 2 · Lekcja 1 z 56/50 w kursie~10 min
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

Go
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.

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

Instrukcja init: zakres ograniczony do if

Możesz zadeklarować zmienną prawidłową tylko wewnątrz if/else, oddzielając go od warunku za pomocą ;:

Go
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.

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

Brak 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.

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

Spróbuj

Ćwiczenie#go.m2.l1.e1
Próby: 0Ładowanie...

Wypisz „positivo”, „zero” lub „negativo” w zależności od wartości n.

Ładowanie edytora...
Pokaż wskazówkę

Łańcuch `if / else if / else` z warunkami na znaku.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#go.m2.l1.e2
Próby: 0Ładowanie...

Użyj instrukcji init, aby zadeklarować v := 42 w if i wypisz ją tylko wtedy, gdy v >= 18.

Ładowanie edytora...
Pokaż wskazówkę

Składnia: `if init; condition { ... }`.

Rozwiązanie dostępne po 3 próbach

Quiz#go.m2.l1.e3
Gotowe

Co drukuje ten program?

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
Opcje odpowiedzi

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 zakres v i err.
  • Cieniowanie w init: uważaj, aby nie zacieniać zmiennych zewnętrznych.
  • Bez trójskładnikowego: napisz rozszerzony if/else.