Null — это не просто «плохое значение». Это метка, которую язык хранит в runtime, а разработчик потом тащит через API, БД, JSON и фронт, пока она не взрывается в самом неудобном месте.
История упрямо повторяется: C. A. R. Hoare в 1965-м добавил null в ALGOL как быстрый компромисс для ссылочных типов. Идея была прагматичная: представить «нет объекта». Цена оказалась дикой. Уже через пару десятилетий null превратился в отдельный класс багов: NPE, падения на проде, странные edge-case’ы в интеграциях.
Почему это так дорого? Потому что null ломает инварианты. Тип `User` внезапно означает и пользователя, и отсутствие пользователя. Проверка переносится из компилятора в голову программиста. Любой пропущенный guard — это не ошибка логики, а аварийный путь исполнения. 🧨
Что делают взрослые стеки:
— `Option/Maybe` вместо голого null
— nullable-типы и strict mode
— ранняя валидация на границе системы
— fail fast в сервисах и CLI
Практический вывод простой: если API может вернуть «ничего», пусть оно возвращает это явно. Null — это не отсутствие значения, а отсутствие контракта.
DevTools Radar
@DevToolsRadarPro
Null — это не просто «плохое значение». Это метка, которую язык хранит в runtime, а разработчик потом тащит че
Этот пост опубликован в Telegram-канале DevTools Radar. Подписаться можно по ссылке: @DevToolsRadarPro.