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

Operatori

Go ha gli operatori classici che ti aspetti, con poche sorprese: aritmetici, di confronto, logici, bitwise. Niente operatore ternario (a ? b : c), niente overloading, niente conversioni implicite tra tipi. La semplicità è una feature.

Aritmetici

Go
a, b := 10, 3
fmt.Println(a + b)  // 13
fmt.Println(a - b)  // 7
fmt.Println(a * b)  // 30
fmt.Println(a / b)  // 3   ← divisione INTERA tra interi
fmt.Println(a % b)  // 1   ← resto (modulo)

Incremento e decremento sono STATEMENT, non espressioni

x++ e x-- non producono un valore: sono "azioni" e basta. Niente y := x++ come in C.

Go
x := 5
x++          // ok: incrementa x
// y := x++  // ERRORE di compilazione
fmt.Println(x) // 6

Confronto

== != < <= > >= ritornano bool. Si applicano a numeri e stringhe; per gli struct serve che TUTTI i campi siano confrontabili (niente slice/map dentro).

Go
"abc" == "abc"  // true
"abc" < "abd"   // true (ordine lessicografico)
3 != 4           // true

Logici con cortocircuito

&&, ||, !. Cortocircuitano da sinistra a destra: se il primo operando basta a determinare il risultato, il secondo non viene neanche valutato.

Go
adult := age >= 18
seniorAdult := age >= 18 && age < 65

Bitwise

& AND, | OR, ^ XOR, << shift sinistro, >> shift destro, &^ AND NOT (bit clear). Sono utili per flag, parsing binario e ottimizzazioni:

Go
flags := uint8(0b0000_0011)
flags |= 0b0000_0100   // imposta un bit:    0000_0111
flags &^= 0b0000_0010  // cancella un bit:   0000_0101
hasFlag := flags & 0b0000_0100 != 0  // true

Niente conversioni implicite

1 + 1.5 in Go compila, perché entrambi sono letterali non tipati. Ma var i int = 1; i + 1.5 NO: serve float64(i) + 1.5.

Go
i := 1
f := 1.5
// i + f          // ERRORE
float64(i) + f    // 2.5

Prova tu

Ejercicio#go.m1.l4.e1
Intentos: 0Cargando...

Calcola in remainder il resto della divisione di 17 per 5 e stampalo. Atteso: 2.

Cargando editor...
Mostrar pista

L'operatore modulo è `%`.

Solución disponible después de 3 intentos

Ejercicio#go.m1.l4.e2
Intentos: 0Cargando...

Stampa true se age è compresa tra 18 e 65 inclusi, false altrimenti.

Cargando editor...
Mostrar pista

Combina due confronti con `&&`.

Solución disponible después de 3 intentos

Cuestionario#go.m1.l4.e3
Listo

Cosa stampa questo codice?

Go
a, b := 7, 2
fmt.Println(a/b, a%b)
Opciones de respuesta

Recap

  • Aritmetici classici; / tra int è divisione intera (tronca).
  • ++ e -- sono statement, non espressioni: niente y := x++.
  • Confronto e logici producono bool; &&/|| cortocircuitano.
  • Bitwise & | ^ << >> &^ per flag e parsing binario.
  • Nessuna conversione implicita tra tipi diversi: usa tipo(x).