На каких языках `if (x)` является допустимым тестом для ненулевого значения? - PullRequest
2 голосов
/ 20 июля 2011

Мне интересно, насколько универсальная языковая парадигма позволяет простой if (x) ... проверять ненулевое значение (по крайней мере для переменной integer )?(в противоположность явному требованию оператора: if (x != 0))

Мотивировано этим вопросом , который был помечен как независимый от языка, но это даже не на 100% правильно для языков, в настоящее время распространенныхиспользовать, хотя это достаточно близко.Это всегда верно для языков со слабой типизацией?

(Предположим, что x был определен, поэтому нам не нужно беспокоиться об этом или об исключениях. Возможно, x не обязательно инициализирован, носчитайте, что это отдельный случай.)

Вот резюме:

C/C++, PERL, Python, PHP, Ruby, BASIC: Yes
C#, Java; Pascal, Modula-2 & other descendants of Pascal: illegal - must be Boolean
Fortran: Illegal syntax - must be Boolean
LISP: All integers considered true, nil considered false.
bash: Legal, but beware 0 signifies command success and nonzero signifies failure

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Есть много других языков, которые не используют эту идиому.

Например, в различных Лиспах (включая Clojure) nil считается ложным значением, но все целые числа считаются истинными:

(if nil "True" "False")
=> "False"

(if 0 "True" "False")
=> "True"
1 голос
/ 20 июля 2011

Условие должно быть логическим в: C #, Java;Паскаль, Модула-2 и другие потомки Паскаля

Условие может быть целым числом: Базовое (без логического значения)

1 голос
/ 20 июля 2011

Это заставило меня задуматься о Ruby.

a = 0
b = 5

if a
    p "true!"
end

if b
    p "true!"
end

Будет напечатано "true!".Тогда есть тот сладкий .zero? метод:

a.zero?
=> true
b.zero?
=> false
...