0

阅读招聘广告,要求(叹息)是申请人应该或多或少讨厌使用variable !== FALSE. 然而,我看不出这是什么原因,因为我觉得它很方便。

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

user = get_user(823);

if(user !== FALSE) {

   // User found   

} else {

  // No user found

}

当然,我可以简单地使用if(!user),但是,我并不总是觉得它适合,尤其是当我需要满足一些条件时。

写这样的代码有什么缺点吗?

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

4

7 回答 7

2

您说 get_user 在不成功时返回 false - 这就是大部分问题。如果函数调用不成功,它应该抛出异常,而不是返回类型不安全的答案(“false”,而不是 User)。

于 2012-08-15T12:49:29.273 回答
1

你可以做意外

if($variable = FALSE)

这将改变$variable

于 2012-08-15T12:48:57.707 回答
1

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

user != FALSE

!user

但是,这略有不同:

user !== FALSE

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

参考:

于 2012-08-15T12:54:34.530 回答
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 和写 a 的意思完全一样。

Python

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

有点跑题了:我认为如果这样的细节是“工作要求”的一部分,那么工作要求就会像 10,000 页一样。

于 2012-08-15T13:13:40.060 回答
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 可能无法按照您的想法工作,因此虽然它更冗长,但也容易出错。

于 2012-08-15T12:49:07.870 回答
0

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

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

因此,请指出在某些情况下这是必要的或有用的,但通常返回多个评估为 FALSE 的值是不好的做法,因此需要在比较运算符中包含类型。

于 2012-08-15T12:53:53.260 回答
0

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

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

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

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

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

这样一个系统的好处是它几乎适用于每种编程语言和不同的范例。

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

于 2012-08-15T12:54:34.670 回答