If statement 在哪种语言中,`if(x)`是非零值的合法测试?

If statement 在哪种语言中,`if(x)`是非零值的合法测试?,if-statement,language-design,If Statement,Language Design,我很好奇,语言范式允许普通if(x).检查非零值(至少在整数变量上)有多普遍? (与显式要求运算符相反:如果(x!=0)) 它的动机是被标记为语言不可知论,但对于目前常用的语言来说,这甚至不是100%正确的,尽管它已经足够接近了。弱类型语言总是这样吗 (假设X已被定义,因此我们不必担心它或异常。X可能不一定已经初始化,但考虑到单独的情况)。 以下是总结: C/C++, PERL, Python, PHP, Ruby, BASIC: Yes C#, Java; Pascal, Modula-2 &

我很好奇,语言范式允许普通
if(x).
检查非零值(至少在整数变量上)有多普遍? (与显式要求运算符相反:
如果(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

这让我想起了鲁比

a = 0
b = 5

if a
    p "true!"
end

if b
    p "true!"
end
两者都将打印“true!”。还有一个甜美的
.zero?
方法:

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

还有很多其他语言不使用这个成语

例如,在各种Lisp(包括Clojure)中,nil被视为假值,但所有整数都被视为真:

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

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

条件在:C#,Java;Pascal、Modula-2和Pascal的其他后代


条件可以是整数:Basic(缺少布尔值)

@downvoter,这是关于语言设计中弱类型哲学的一个合理问题;还介绍了测试整数表达式时对True/False的具体解释。我认为挑战C语言家族做事的方式是语言不可知论的观点是很有用的…如果可能的话,我将把这个问题留给大家去了解更多的语言。。。