Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 1 de 56/50 en el curso~10 min
Lecciones del módulo (1/5)

if, else e statement di init

In Go la sintassi di if è quella classica ma con due differenze importanti rispetto a C/Java: niente parentesi attorno alla condizione, e la possibilità di dichiarare una variabile temporanea direttamente nell'if (lo statement di init).

Sintassi base

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

Le graffe sono obbligatorie, anche per blocchi di una sola riga. La condizione deve essere di tipo bool: niente "truthiness" alla Python o JS.

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

Statement di init: scope limitato all'if

Puoi dichiarare una variabile valida solo all'interno di if/else, separandola dalla condizione con ;:

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

È il pattern idiomatico per gestire errori senza inquinare lo scope esterno.

Shadowing nello scope dell'if

Se una variabile esterna viene "oscurata" dall'init, dentro all'if vince la versione locale. Subito dopo, riemerge quella esterna.

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

Niente operatore ternario

Go non ha cond ? a : b. Per assegnazioni condizionali serve un if/else in 3-4 righe — è scelta di design per privilegiare leggibilità.

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

Prova tu

Ejercicio#go.m2.l1.e1
Intentos: 0Cargando...

Stampa 'positivo', 'zero' o 'negativo' a seconda del valore di n.

Cargando editor...
Mostrar pista

Catena `if / else if / else` con condizioni sui segni.

Solución disponible después de 3 intentos

Ejercicio#go.m2.l1.e2
Intentos: 0Cargando...

Usa lo statement di init per dichiarare v := 42 nell'if e stamparla solo se v >= 18.

Cargando editor...
Mostrar pista

Sintassi: `if init; condizione { ... }`.

Solución disponible después de 3 intentos

Cuestionario#go.m2.l1.e3
Listo

Cosa stampa questo programma?

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

Recap

  • Condizioni senza parentesi, graffe sempre obbligatorie.
  • La condizione deve essere bool: niente truthiness implicita.
  • Init if v, err := f(); err == nil { ... } limita lo scope di v ed err.
  • Shadowing nell'init: occhio a non oscurare variabili esterne.
  • Nessun ternario: scrivi un if/else espanso.