Какова цель нуля? - PullRequest
       61

Какова цель нуля?

37 голосов
/ 25 февраля 2009

Я учусь в классе компиляторов, и перед нами стоит задача создания собственного языка с нуля. В настоящее время наша дилемма заключается в том, включать ли тип 'null' или нет. Какую цель дает нуль? Некоторые из нашей команды утверждают, что в этом нет особой необходимости, в то время как другие являются ненулевыми только за дополнительную гибкость, которую она может обеспечить.

Есть ли у вас какие-либо мысли, особенно за или против нуля? Вы когда-нибудь создавали функциональность, которая требовала null?

Ответы [ 25 ]

1 голос
/ 28 февраля 2009

Я предлагаю вашей команде: придумайте несколько примеров программ, которые должны быть написаны на вашем языке, и посмотрите, как бы они выглядели, если бы вы пропустили null, по сравнению с тем, если бы вы его включили.

1 голос
/ 25 февраля 2009

Null - это заполнитель, который означает, что этой переменной нельзя присвоить значение (добавление «правильного типа» для языка со статической типизацией).

Здесь когнитивный диссонанс. Я слышал где-то еще, что люди не могут постичь отрицание, потому что они должны принять значение, а затем представить его непригодность.

1 голос
/ 25 февраля 2009

Если вы создаете статически типизированный язык, я думаю, что null может значительно усложнить ваш компилятор.

Если вы создаете динамически типизированный язык, NULL может оказаться весьма полезным, поскольку это просто еще один «тип» без каких-либо изменений.

0 голосов
/ 25 февраля 2009

Ноль для объектов, что 0 для чисел.

0 голосов
/ 25 февраля 2009

Null обеспечивает простой выход для программистов, которые не полностью продумали логику и области, необходимые для их программы, или будущие последствия обслуживания при использовании значения, по существу, без четкого и согласованного определения.

Поначалу может показаться очевидным, что это должно означать «нет значения», но то, что это на самом деле означает, зависит от контекста. Если, например, LastName === null, означает ли это, что у этого человека нет фамилии, или мы не знаем, какая у него фамилия, или что она еще не введена в систему? Нуль равен самому себе или нет? В SQL это не так. На многих языках это так. Но если мы не знаем значение personA.lastName или personB.lastName, как мы можем узнать это personA.lastName === personB.lastName, а? Если результат будет ложным, или ... ноль?

Это зависит от того, что вы делаете, поэтому опасно и глупо иметь какое-то общесистемное значение, которое можно использовать для любой ситуации, которая выглядит как «ничто», так как другие части ваша программа и внешние библиотеки или модули не могут зависеть от правильного истолкования того, что вы имели в виду под «нулем».

Вам гораздо лучше четко определить ДОМЕН возможных значений lastName и точно, что на самом деле означает каждое возможное значение, а не зависеть от какого-то расплывчатого общесистемного представления о нуле, которое может иметь или не иметь никакого отношения к тому, что вы вы делаете, в зависимости от того, какой язык вы используете, и что вы пытаетесь сделать. Значение, которое на самом деле может вести себя совершенно неправильно, когда вы начинаете работать с вашими данными.

...