
Баг: Неправильная группировка при смешивании `&&` и `||`
Go говорит: у && приоритет выше, чем у ||. Это как * и + в математике.
a := true
b := false
c := false
result := a && b || c
// Компьютер делает: (a && b) || c
// (true && false) || false => false || false => false
x := true
y := true
z := false
wrongThinking := x || y && z // Ты думаешь: (x || y) && z => true && false => false
realResult := x || (y && z) // На самом деле: true || (true && false) => true || false => true
fmt.Println(realResult) // true, а не false!Шпаргалка по приоритетам (от высшего к низшему):
Операция | Приоритет | Пример |
|---|---|---|
| 1 (самый высокий) |
|
| 2 | a && b || c = (a && b) || c |
|| | 3 (низкий) |
Правило: Если сомневаешься - ставь скобки. Скобки дешевле, чем баг в 3 часа ночи.
Загрузка...