Модульні уроки (4/5)
Оператори
Go має класичні оператори, яких ви очікували, з кількома сюрпризами:
арифметичний, порівняльний, логічний, порозрядний. Немає тернарного оператора
(a ? b : c), без перевантаження, без неявних перетворень між типами.
Простота – це особливість.
Арифметика
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)Інкремент і декремент – це ОПИСКИ, а не вирази
x++ та x-- не створюють значення: це "дії" і нічого
більше. Ні y := x++ як у C.
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6Порівняння
== != < <= > >= повернути bool. Вони застосовуються до чисел і рядків; для
structs УСІ поля мають бути порівнянними (без фрагментів/карт усередині).
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // trueЛогічний з коротким замиканням
&&, ||, !. Вони замикаються зліва направо: якщо перший
операнд достатньо для визначення результату, другий не парний
оцінено.
adult := age >= 18
seniorAdult := age >= 18 && age < 65Побітово
& І, | АБО, ^ XOR, << зсув вліво, >> зсув вправо, &^ І
НІ (трохи ясно). Вони корисні для прапорів, бінарного аналізу та
оптимізації:
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Немає неявних перетворень
1 + 1.5 в Go компілюється, оскільки обидва є нетипізованими літералами.
Але var i int = 1; i + 1.5 робить НІ: вам потрібен float64(i) + 1.5.
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5Ваша черга
Обчисліть в остачі залишок від ділення 17 на 5 і надрукуйте його. Очікується: 2.
Показати підказку
Оператор модуля є `%`.
Рішення доступне після 3 спроб
Друкуйте true, якщо вік становить від 18 до 65 включно, інакше — false.
Показати підказку
Поєднайте два порівняння за допомогою "&&".
Рішення доступне після 3 спроб
Що друкує цей код?
a, b := 7, 2
fmt.Println(a/b, a%b)Підведення підсумків
- Класична арифметика;
/між int є цілочисельним діленням (обрізається). ++та--є операторами, а не виразами: ніy := x++.- Порівняння та логічні оператори створюють
bool;&&/||коротке замикання. - Побітовий
& | ^ << >> &^для прапорів і двійкового аналізу. - Немає неявних перетворень між різними типами: використовуйте
type(x).