Сайт работает в тестовом режиме - все замечания, предложения и информацию о найденных ошибках направляйте, пожалуйста, в Telegram-группу
Курс в процессе наполнения. Полный курс доступен на Степике

Баг: Неправильная группировка при смешивании `&&` и `||`

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 (самый высокий)

!a && b = (!a) && b

&&

2

a && b || c = (a && b) || c

||

3 (низкий)

Правило: Если сомневаешься - ставь скобки. Скобки дешевле, чем баг в 3 часа ночи.

Загрузка...