Salt la conținutul principal
Modulul 2 · Lecția 1 din 56/50 în curs~10 min
Lecții din modul (1/5)

declarațiile if, else și init

În Go, sintaxa if este cea clasică, dar cu două diferențe importante comparativ cu C/Java: fără paranteze în jurul condiției și capacitatea de a declara o variabilă temporară direct în if (instrucțiunea init).

Sintaxa de bază

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

Acoladele sunt obligatorii, chiar și pentru blocurile cu o singură linie. The condiția trebuie să fie de tipul bool: fără „adevăr” precum Python sau JS.

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

Declarație init: domeniul de aplicare limitat la if

Puteți declara o variabilă validă numai în interiorul if/else, separându-l de condiție cu ;:

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

Este modelul idiomatic pentru gestionarea erorilor fără a polua domeniul exterior.

Umbrire în domeniul if

Dacă o variabilă exterioară este „umbrită” de init, în interior dacă versiunea locală câștigă. Imediat după, cel exterior reapare.

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

Fără operator ternar

Go nu are cond ? a : b. Pentru sarcinile condiționate aveți nevoie de un if/else în 3-4 rânduri — este o alegere de design pentru a favoriza lizibilitatea.

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

Încearcă

Exercițiu#go.m2.l1.e1
Încercări: 0Se încarcă…

Tipăriți „pozitiv”, „zero” sau „negativo”, în funcție de valoarea lui n.

Se încarcă editorul...
Afișează indiciu

`dacă / altfel dacă / altfel` cu condiții pe semn.

Soluție disponibilă după 3 încercări

Exercițiu#go.m2.l1.e2
Încercări: 0Se încarcă…

Utilizați instrucțiunea init pentru a declara v := 42 în if și imprimați-o numai dacă v >= 18.

Se încarcă editorul...
Afișează indiciu

Sintaxă: `if init; starea { ... }`.

Soluție disponibilă după 3 încercări

Quiz#go.m2.l1.e3
Gata

Ce imprimă acest program?

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
Opțiuni de răspuns

Recapitulare

  • Conditii fara paranteze, acolade intotdeauna obligatorii.
  • Condiția trebuie să fie bool: fără adevăr implicit.
  • Init if v, err := f(); err == nil { ... } limitează domeniul de aplicare a v și err.
  • Umbrire în init: aveți grijă să nu umbriți variabilele exterioare.
  • Fără ternar: scrieți un if/else extins.