Я читал о (не) удобстве иметь null
вместо (например) Maybe
. Прочитав эту статью , я убедился, что было бы намного лучше использоватьMaybe
(или что-то подобное). Однако я удивлен, увидев, что все «общеизвестные» императивные или объектно-ориентированные языки программирования по-прежнему используют null
(что обеспечивает неконтролируемый доступ к типам, которые могут представлять значение «ничего»), и это Maybe
в основном используется в функциональных языках программирования.
В качестве примера рассмотрим следующий код C #:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Здесь что-то плохо пахнет ... Почему мы должны проверять, является ли аргумент нулевым? Разве мы не должны предполагать, что каждая переменная содержит ссылку на объект? Как видите, проблема в том, что по определению почти все переменные могут содержать нулевую ссылку. Что если бы мы могли решить, какие переменные являются «обнуляемыми», а какие нет? Это сэкономило бы нам много усилий при отладке и поиске «NullReferenceException». Представьте, что по умолчанию никакие типы не могут содержать нулевую ссылку . Вместо этого вы бы прямо заявили, что переменная может содержать нулевую ссылку , только если она вам действительно нужна. Это идея может быть. Если у вас есть функция, которая в некоторых случаях дает сбой (например, деление на ноль), вы можете вернутьMaybe<int>
, явно указав, что результатом может быть int, но тоже ничего! Это одна из причин, почему предпочтение может быть вместо нуля. Если вас интересуют другие примеры, тогда я предлагаю прочитать эту статью .
Факты таковы, что, несмотря на недостатки, заключающиеся в том, что большинство типов по умолчанию обнуляются, большинство языков программирования ОО фактически делают это. Вот почему я задаюсь вопросом о:
- Какие аргументы вы бы использовали
null
вместо своего языка программированияMaybe
? Есть ли причины вообще или это просто «исторический багаж»?
Пожалуйста, убедитесь, что вы понимаете разницу между null и Maybe, прежде чем ответить на этот вопрос.
null
и его концепция не существует (IIRC Haskell является одним из таких примеров).
null
в них долгое время. Нелегко просто бросить это.