Версия этой статьи первоначально появилась на Мой блог Github Pages
Различные языки имеют разные мнения о том, что лечить как «правдоподобные» или «ложное» при использовании не булевого объекта как выражение внутри Если
утверждение.
Я посмотрел на Python, Groovy, JavaScript и Ruby, чтобы сравнить их различия.
- Нуль всегда ложно
- Ноль и пустые струны являются фальсифицированными, за исключением рубина
- Пустые коллекции (Set/List/Dict) являются ложными в Python и Groovy, но не JavaScript или Ruby
Мои наблюдения и личные мнения на языковой конструкции:
- Python лечит нулю, пустые строки и коллекции все как «ложное». Лично я нахожу эту самую интуитивную конвенцию.
- Лечение нуля и NULL в качестве фальсификации имеет исторический прецедент из C. ЛОЖНЫХ и нулевых указателей оба представляют как Zeros в регистре или местоположении памяти.
- Лечение пустых струн и коллекций является хорошим удобством, учитывая количество раз, когда я написал условные условия, такие как
Если (foo и! foo.empty ())
Отказ Обычно это исключение, что я хочу различать нулевые и пустые в условном состоянии. Так что приятно, чтоЕсли (foo)
обрабатывает общий корпус, то я могу написатьЕсли (не Foo нет)
Когда я действительно хочу отличить нуль. - Обработка пустой строки подобному значению NULL, знакома от моего опыта Oracle. Кроме того, он соответствует лечению пустой коллекции.
- Groovy вдохновлен Python и принимает подобные конвенции для правдопоставления.
- Ruby занимает другое мнение, что все значения являются правдой, кроме
Ниль
(иfalse
, конечно). Пока это не мое личное предпочтение, это оправдано и самостоятельно. - JavaScript может быть надежно, как ожидается, доставит WTF. JavaScript лечит нулю и пустые строки как ложность, но пустые коллекции как правдоподобные. Для меня трудно понять, почему строки и коллекции должны вести себя по-разному; Поведение Python имеет гораздо больше смысла. Но подожди, становится еще лучше: проверить это Ссылка на Stackoverflow Отказ
Оригинал: “https://dev.to/wrschneider/opinions-on-truthiness-across-languages”