Lecții din modul (4/5)
Operatori
Go are operatorii clasici la care te-ai aștepta, cu câteva surprize:
aritmetică, comparație, logic, pe biți. Fără operator ternar
(a ? b : c), fără supraîncărcare, fără conversii implicite între tipuri.
Simplitatea este o caracteristică.
Aritmetică
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)Creșterea și decrementarea sunt Enunțuri, nu expresii
x++ și x-- nu produc o valoare: sunt „acțiuni” și nimic
mai mult. Nu y := x++ ca în C.
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6Comparaţie
== != < <= > >= returnează bool. Se aplică numerelor și șirurilor de caractere; pentru
structs TOATE câmpurile trebuie să fie comparabile (fără felii/hărți în interior).
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // trueLogic cu scurtcircuit
&&, ||, !. Ele scurtcircuita de la stânga la dreapta: dacă primul
operand este suficient pentru a determina rezultatul, al doilea nu este egal
evaluat.
adult := age >= 18
seniorAdult := age >= 18 && age < 65Pe bit
& AND, | SAU, ^ XOR, << shift la stânga, >> shift dreapta, IN_LINE_TECTED
NU (putin clar). Sunt utile pentru steaguri, analiza binară și
optimizări:
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 // trueFără conversii implicite
1 + 1.5 în Go compilează, deoarece ambele sunt literale netipizate.
Dar var i int = 1; i + 1.5 NU: aveți nevoie de float64(i) + 1.5.
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5Rândul tău
Calculați în rest restul împărțirii a 17 la 5 și imprimați-l. Așteptată: 2.
Afișează indiciu
Operatorul modulo este `%`.
Soluție disponibilă după 3 încercări
Tipăriți true dacă vârsta este între 18 și 65 de ani inclusiv, false în caz contrar.
Afișează indiciu
Combinați două comparații cu `&&`.
Soluție disponibilă după 3 încercări
Ce imprimă acest cod?
a, b := 7, 2
fmt.Println(a/b, a%b)Recapitulare
- Aritmetica clasica;
/între int este diviziunea întregului (trunchiază). ++și--sunt instrucțiuni, nu expresii: nuy := x++.- Operatorii de comparație și logici produc
bool;&&/||scurtcircuit. - Bitwise
& | ^ << >> &^pentru steaguri și analiza binară. - Fără conversii implicite între diferite tipuri: utilizați
type(x).