Lekcje modułu (4/5)
Operatory
Go ma klasyczne operatory, których można się spodziewać, z kilkoma niespodziankami:
arytmetyka, porównanie, logiczne, bitowe. Brak operatora trójskładnikowego
(a ? b : c), bez przeciążeń, bez ukrytych konwersji między typami.
Prostota jest cechą.
Arytmetyka
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)Zwiększanie i zmniejszanie to OŚWIADCZENIA, a nie wyrażenia
x++ i x-- nie generują wartości: są to „akcje” i nic
więcej. Brak y := x++ jak w C.
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6Porównanie
== != < <= > >= zwróć bool. Dotyczą one liczb i ciągów znaków; dla
struktury WSZYSTKIE pola muszą być porównywalne (w środku nie ma wycinków/map).
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // trueLogiczne przy zwarciu
KODEF0, KODEF1, KODEF2. Zwierają od lewej do prawej: jeśli pierwsi operand wystarczy, aby określić wynik, drugi nie jest parzysty oceniane.
adult := age >= 18
seniorAdult := age >= 18 && age < 65Bitowo
& AND, | OR, ^ XOR, << przesunięcie w lewo, >> przesunięcie w prawo, &^ AND
NIE (nieco jasne). Są przydatne do flag, analizowania binarnego i
optymalizacje:
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 // trueBrak ukrytych konwersji
1 + 1.5 w Go kompiluje, ponieważ oba są literałami bez typu.
Ale var i int = 1; i + 1.5 NIE: potrzebujesz float64(i) + 1.5.
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5Twoja kolej
Oblicz resztę z dzielenia 17 przez 5 i wydrukuj ją. Oczekiwane: 2.
Pokaż wskazówkę
Operator modulo to `%`.
Rozwiązanie dostępne po 3 próbach
Wypisz wartość true, jeśli wiek mieści się w przedziale od 18 do 65 lat włącznie, w przeciwnym razie wartość false.
Pokaż wskazówkę
Połącz dwa porównania z `&&`.
Rozwiązanie dostępne po 3 próbach
Co wypisuje ten kod?
a, b := 7, 2
fmt.Println(a/b, a%b)Podsumowanie
- Klasyczna arytmetyka;
/pomiędzy int to dzielenie liczb całkowitych (obcinanie). ++i--to instrukcje, a nie wyrażenia: braky := x++.- Operatory porównania i logiczne tworzą
bool; Zwarcie w&&/||. - Bitowy
& | ^ << >> &^dla flag i parsowania binarnego. - Brak ukrytych konwersji między różnymi typami: użyj
type(x).