300просмотров
7.7%от подписчиков
19 марта 2026 г.
questionScore: 330
🤔 Почему NULL часто называют «Ошибкой на миллиард долларов»? Термин «Ошибка на миллиард долларов» (The Billion Dollar Mistake) был введён Тони Хоаром (Tony Hoare), создателем NULL, который в 2009 году на конференции признался, что введение NULL было его крупнейшей ошибкой. Название связано с тем, что NULL стал причиной множества багов, сбоев в программах и уязвимостей, что привело к огромным финансовым потерям в индустрии. 🚩Какие проблемы вызывает NULL? 🟠NullPointerException (NPE) и аварийные сбои - Попытка вызвать метод у NULL приводит к ошибке NullPointerException в Java, NullReferenceException в C# и аналогичным сбоям в других языках. - Это одна из самых распространённых ошибок в программировании. 🟠Дополнительные проверки и сложность кода - Из-за NULL приходится постоянно писать проверки if (x != null), что раздувает код и делает его менее читаемым. - Если забыть такую проверку, можно получить неожиданный сбой. 🟠Слабая типизация и отсутствие явности - NULL можно передавать в любую функцию или объект, что ломает строгую типизацию. - Код становится менее предсказуемым. 🟠Проблемы с базами данных - NULL в SQL ведёт себя неинтуитивно (NULL != NULL, сравнение может давать UNKNOWN). - Может приводить к некорректным вычислениям в агрегатных функциях. 🟠Уязвимости в безопасности - Некоторые атаки используют NULL для взлома систем (например, null dereference в C/C++ может привести к DoS-атаке). - NULL может скрывать ошибки и приводить к утечке данных. 🚩Какие альтернативы NULL? 🟠Optional / Maybe (Java, Kotlin, Haskell, Rust) - Использование обёрток вроде Optional<T> (Java) или Option<T> (Rust) позволяет явно указывать возможность отсутствия значения. 🟠Исключения вместо NULL (C# и Java) - Вместо возврата NULL можно выбрасывать осмысленные исключения (IllegalArgumentException, NotFoundException). 🟠Специальные значения по умолчанию - Вместо NULL можно использовать дефолтные объекты (EmptyList, GuestUser и т. д.). 🟠Типы-юнит (Tagged Union) в функциональных языках - Например, в Haskell и Rust применяют Either<T, E>, Option<T>, что делает обработку NULL-подобных случаев более явной. Ставь 👍 и забирай 📚 Базу знаний