#проектирование #любой_язык #null #типизация
Меня интересует как используется nil в различных языках программирования, и вообще насколько это удобно с точки зрения дизайна языка. В данной теме обсуждаются исключительно динамически типизированные языки. К примеру в JavaScript есть два значения похожих на nil: null и undefined. (Нужно ли было плодить?) В Scheme есть #f, но нет nil. В Factor тоже нету nil, и используют f. (Нужен ли nil если есть false?) Кроме того, как-то читал что вроде в первых версиях Objective-C был объект nil (Objective-C не знаю вообще), который поглощал вызовы, был чёрной дырой. Т.е. вёл себя как NaN для чисел. На любое сообщение объект возвращал nil. Насколько допустимо трактовать "пустые" объекты (пустой список, пустой словарь и т.д.) как false, и есть ли у такой фичи опасные побочные эффекты, или вообще расположение к каким-либо багам. Приветствуются: Ссылки на статьи с обзором различных подходов Ссылки на какие-либо интересные языки, относящиеся к теме Обсуждение различных подходов, удобства и опасности использования
Ответы
Ответ 1
NULL нужен там, где есть ссылки. Почему в JavaScript есть еще undefined? Потому что null и undefined - разные объекты. По умолчанию ссылка указывает на undefined, а null - элемент логики. Сейчас ссылка null, потом не null. Скажем так, в С/С++ указатели тоже не null изначально, а undefined. Пустые объекты - не false, потому что false - семантическое значение. Элемент логических выражений, а null - нет (несмотря на то, что он используется в них, он преобразовывается). Если кратко, то наличие пустого объекта обязательно для языков со ссылками, а false - это отдельный объект, такой же как строка "ABC" или 4 - т.е. непустой, а семантически значимый.Ответ 2
Хотя автор и задает вопрос по смыслу nil/null по отношению к динамическим языкам, но я считаю, что наиболее ярко смысл NULL раскрывается в SQL, а именно в случае со связанными запросами: пресловутые inner/left/right join). Без понятия NULL (то есть нет данных) весь SQL сильно теряет, если не сказать большего - вообще невозможно становится работать без NULL.Ответ 3
Я считаю, что использование NULL важно в процессе отладки программы (скрипта). false - это все же нормальное значение переменной, а вот NULL - это именно отсутствие какого либо значения, вернее оно ПУСТОЕ. Обращение к NULL переменной может вызвать определенные исключительные ситуации, которые всегда вызовут ошибку работы программы, и именно это дает возможность легко найти и устранить эти ошибки. Я всегда использую именно NULL, как при возврате значений из функций, так и при передаче значений в функцию. Проверяю не просто !переменная, а именно == != NULL... На мой взгляд так красивее )) Удачи в поисках ответов!
Комментариев нет:
Отправить комментарий