使用“变量!== FALSE”的缺点

时间:2012-08-15 12:45:45

标签: c# php coding-style conditional

阅读招聘广告,要求(叹息)是申请人或多或少地讨厌使用variable !== FALSE。然而,我看不出这个的原因,因为我发现它非常方便。

假设函数(get_user( int user_id ))如果不成功(找到请求的用户)则返回FALSE,我可以简单地使用:

user = get_user(823);

if(user !== FALSE) {

   // User found   

} else {

  // No user found

}

当然,我可以简单地使用if(!user),但是,我并不总是觉得它很合适,特别是当我有几个条件可以满足时。

编写这样的代码是否有任何不足之处?

澄清:这是一个更全球化的问题,因为广告反对!== FALSE的PHP使用和!= FALSE的C#使用。

7 个答案:

答案 0 :(得分:2)

你说get_user在没有成功时返回false - 这就是问题的主要原因。如果函数调用不成功,它应该抛出异常,而不是返回非类型安全的答案(“false”而不是用户)。

答案 1 :(得分:1)

你可以在事故中做到

if($variable = FALSE)

这会改变$variable

的值

答案 2 :(得分:1)

在Javascript中,以下两个是等价物:

user != FALSE

!user

然而,这略有不同:

user !== FALSE

因为它是===的否定,它检查值和类型是否相同。

参考:

答案 3 :(得分:0)

如果你有Java

Boolean flag1 = new Boolean(true);
Boolean flag2 = new Boolean(false);

if (flag1 == Boolean.TRUE || flag1 == Boolean.FALSE) // is false.
if (flag2 == Boolean.TRUE || flag2 == Boolean.FALSE) // is false.

if (flag1 != Boolean.FALSE && flag2 != Boolean.FALSE) // is true

使用== FALSE或!= FALSE可能不会像你想象的那样工作,虽然它更详细,但也容易出错。

答案 4 :(得分:0)

从开发的角度来看,最好设计不返回评估为FALSE的不同值的方法。例如,你的函数不应该返回0 or NULL or FALSE or "" (empty string) or empty array()的多个可能值,因为这需要一些不明显的逻辑来检查之后的结果。

另一方面,如果我们谈论PHP,最好知道某些函数返回零或假,例如strpos。您不应该假设if (!strpos(...))表示该字符串未包含在另一个字符串中,它可能位于零位置,其位置为FALSE。有时函数可能会在失败时返回FALSE,或者在成功时返回空数组(不会产生计算结果为TRUE)。

因此,指出有些情况这是必要的或有用的,但一般来说,返回多个值为FALSE的错误做法,因此需要在比较运算符中包含该类型。

答案 5 :(得分:0)

要求的要求可能与品味和使用领域有关。

在严格的逻辑系统中,人们可能倾向于选择表示对象(在任何类型的存储或存储器中)的ID值不为0(并且仅为正数)。

为0表示不存在的对象(所谓的NULL对象)留下了空间。

负数也可以用来表示错误等元信息。但是严格的系统不应该使用任何负数并在某些上下文中传递元信息而不是数据流的主线。

可能这就是想要的。在这种情况下,值FALSE将不存在,因为整个系统仅与数字有关。

这种系统的好处在于它几乎适用于所有编程语言和不同的范例。

通常,数字零表示虚假条件,而非零数字表示真实条件。

答案 6 :(得分:0)

实际上这取决于语言。

<强> C

在程序语言C中没有bool,然后TRUE或FALSE是定义的值,大多数为1表示TRUE,0表示FALSE。但是,由于这仅仅是一种约定,有些将FALSE定义为-1,将TRUE定义为255.您会看到这会导致奇怪的行为,因此C总是检查定义的值并确保这些值匹配。

同样在C中,有些人认为最好的方法是使用'FALSE == a'而不是'a == FALSE'。原因是如果忘记了一个=,则第一个(FALSE == a)给出编译错误,第二个被视为赋值,这显然是无意的。

<强> C#

但是,在C#中,预定义了true和false,并且根据true和false检查变量是没有用的。 a == true表示与编写。

完全相同

<强>的Python

然而,在Python中,有一个变化。 a == true表示变量a应该是布尔值,如果只写'a',则表示它也可以是0,[],{}或任何初始值。

有点偏离主题:我认为如果这些细节是“工作要求”的一部分,那么工作要求将是10,000页。