Заимствование страницы из Монада Возможно Хаскелла , как вы будете обрабатывать возвращаемое значение, которое может существовать или не существовать? Например, если вы пытались выделить память, но ни одна не была доступна. Или, возможно, вы создали массив для хранения 50 foos, но ни один из foos еще не был создан - вам нужен какой-то способ, чтобы иметь возможность проверять подобные вещи.
Полагаю, вы можете использовать исключения, чтобы охватить все эти случаи, но означает ли это, что программисту придется обернуть все из них в блок try-catch? Это было бы в лучшем случае раздражающим. Или все должно было бы возвращать свое собственное значение плюс логическое значение, указывающее, было ли значение допустимым, что, безусловно, не лучше.
FWIW, я не знаю ни одной программы, у которой нет некоторого вида понятия NULL
- у вас есть null
во всех языках стиля C и Java ; Python имеет None
, Scheme, Lisp, Smalltalk, Lua, Ruby - все имеют nil
; VB использует Nothing
; и у Haskell есть другой вид nothing
.
Это не означает, что язык абсолютно должен иметь какой-то ноль, но если все другие большие языки там его используют, несомненно, за этим стоит какая-то здравая аргументация.
С другой стороны, если вы создаете только облегченный DSL или какой-либо другой неуниверсальный язык, вы можете обойтись без нуля, если ни один из ваших родных типов данных не требует этого.