Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

nil в языках программирования

#проектирование #любой_язык #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... На мой взгляд так красивее )) Удачи в поисках ответов!

Комментариев нет:

Отправить комментарий