Энциклопедия багов
Использование `n % 2 == 1` для определения нечётностиЛогические и тихие ошибки/ Логическая ошибка
Переменная vs константа в арифметикеОшибки сборки/ Компиляция/ Семантическая
Сравнение значений разных типовОшибки сборки/ Компиляция/ Семантическая
Потеря данных при приведении "вниз"Логические и тихие ошибки/ Логическая ошибка
Сложение разных целочисленных типов без приведенияОшибки сборки/ Компиляция/ Семантическая
Ожидание всегда неотрицательного остаткаЛогические и тихие ошибки/ Логическая ошибка
Неверное округление при деленииЛогические и тихие ошибки/ Логическая ошибка
Деление на ноль с переменнойОшибки выполнения/ Паника (runtime panic)/ Арифметика
Ожидание дробного результата от деления целыхЛогические и тихие ошибки/ Логическая ошибка
Неучёт переполнения при умноженииЛогические и тихие ошибки/ Логическая ошибка
Надежда на автоматическую проверку границЛогические и тихие ошибки/ Логическая ошибка
Выбор `uint` для значений, которые могут стать отрицательнымиОшибки сборки/ Компиляция/ Семантическая
Использование знакового типа для заведомо неотрицательных данныхЛогические и тихие ошибки/ Логическая ошибка
Использование `int` везде "на всякий случай"Логические и тихие ошибки/ Логическая ошибка
Сравнение разных типов в `case`Ошибки сборки/ Компиляция/ Семантическая
Путать `switch` с выражением и без выраженияОшибки сборки/ Компиляция/ Семантическая
Забывать, что `case` не проваливается автоматическиЛогические и тихие ошибки/ Логическая ошибка
Слишком глубокие вложения (лестница ужасов)Логические и тихие ошибки/ Логическая ошибка
Финальный `else` - не обязателен, а осознанЛогические и тихие ошибки/ Логическая ошибка
Переменная в `if` живет только внутриОшибки сборки/ Компиляция/ Семантическая