Przejdź do głównej treści
eLearner.app
Moduł 1 · Lekcja 4 z 54/50 w kursie~8 min
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

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)

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.

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

Poró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).

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

Logiczne przy zwarciu

KODEF0, KODEF1, KODEF2. Zwierają od lewej do prawej: jeśli pierwsi operand wystarczy, aby określić wynik, drugi nie jest parzysty oceniane.

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

Bitowo

& AND, | OR, ^ XOR, << przesunięcie w lewo, >> przesunięcie w prawo, &^ AND NIE (nieco jasne). Są przydatne do flag, analizowania binarnego i optymalizacje:

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

Brak 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.

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

Twoja kolej

Ćwiczenie#go.m1.l4.e1
Próby: 0Ładowanie...

Oblicz resztę z dzielenia 17 przez 5 i wydrukuj ją. Oczekiwane: 2.

Ładowanie edytora...
Pokaż wskazówkę

Operator modulo to `%`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#go.m1.l4.e2
Próby: 0Ładowanie...

Wypisz wartość true, jeśli wiek mieści się w przedziale od 18 do 65 lat włącznie, w przeciwnym razie wartość false.

Ładowanie edytora...
Pokaż wskazówkę

Połącz dwa porównania z `&&`.

Rozwiązanie dostępne po 3 próbach

Quiz#go.m1.l4.e3
Gotowe

Co wypisuje ten kod?

Go
a, b := 7, 2
fmt.Println(a/b, a%b)
Opcje odpowiedzi

Podsumowanie

  • Klasyczna arytmetyka; / pomiędzy int to dzielenie liczb całkowitych (obcinanie).
  • ++ i -- to instrukcje, a nie wyrażenia: brak y := 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).