Это запах кода или языка, или детали реализации, или соглашение?
Действительно, это зависит от ситуации.
Помещение всех ложных значений и всех истинных значений в корзину упрощает вещи, до тех пор, пока различия не будут иметь значения, будь то плохой дизайн кода или потому что это действительно имеет значение по какой-то причине.
В том же духе Хоар извинился за изобретение ссылки null
, которая настолько близка к корню этой правдивой проблемы, насколько я вижу. Дизайн JavaScript только запутывает проблему, добавляя еще больше правдивых значений, заставляя многих просто выступать за явную проверку, чтобы избежать трудного отслеживания ошибок (Дуглас Крокфорд). Сообщество JavaScript приняло сам язык, немного застряло. Основная команда Python выступает за обратное, так как языковой дизайн, похоже, настроен на упрощение вещей, а не на их смешение, и основная команда все еще планирует изменения в языке. Небольшие итеративные изменения - это сущность значительных улучшений со временем, будь то соглашение или языковой дизайн.
Оба являются хорошими стратегиями для их конкретной ситуации. Я не говорю, что это исключительный источник улучшений, но это основной источник улучшений в настоящее время.
Например, True
и False
на самом деле являются подклассами int
в Python, в частности 0 и 1. Это имеет несколько конструктивных преимуществ. Тогда сторонники PEP8 предпочитают делать
if a_reference:
pass
Единственный момент, когда None
действительно нужно использовать в Python, - это указание необязательного параметра.
def foo(bar=optional): # NOTE I made up this idealistic construct
"""Looks good at the surface"""
pass
def foo(bar=None):
"""But this is clear to the programmer"""
pass
JavaScript неявно имеет все переменные как необязательные:
function foo(x, y, z) {
// Certainly not clear to the programmer.
}
И Крокфорд выступает за явную проверку вещей, чтобы попытаться внести некоторую ясность в язык.
if (foo === undefined) {
// pass
}
В основном JavaScript добавил нулевую ссылку # 2, известную как undefined
. Я также думаю, что это забавно, что язык JavaScript так плохо рассматривается сообществом программистов, что они считают справедливым компромисс добавить сложность использования чего-то вроде CoffeeScript, GWT, Pyjamas, просто чтобы иметь лучший клиентский язык. Конечно, я не согласен с дополнительной сложностью, но, к сожалению, некоторые люди могут получить выгоду, хотя бы временно, и быстрее справиться с задачей, а не работать с JavaScript.
Я думаю, что в конечном итоге это глупое решение.