【问题标题】:Assignment in condition. Is it a good practice? [closed]条件分配。这是一个好习惯吗? [关闭]
【发布时间】:2012-02-12 11:54:51
【问题描述】:

考虑:

if (a = 10)
{
   /* do something */
}

我很感兴趣这是否是一件好事,以及为什么我必须经常面对它。提前谢谢你。

请考虑一个更复杂的例子。你更喜欢什么?为什么?

function getSomeData()
{
    return rand(0, 5);
}

第一:

if ($result = getSomeData())
{
    print($result)
}

或第二个:

$result = getSomeData();
if ($result)
{
    print($result);
}

【问题讨论】:

  • 不,一般来说这不是好的做法。在这种情况下,根据语言,它要么抛出错误(因为a 不是布尔值或赋值不返回值),要么总是评估为真(0 以外的整数“通常”评估为真)。在这两种情况下,if 语句似乎都是不必要的。

标签: php coding-style


【解决方案1】:

在这个特定的例子中,if 是不必要的,做作的返回总是 10。

下面会更有趣:

if (a = b) 
{ 
    // do stuff 
}

在这种情况下,我更喜欢用另一对括号括起来,以便向其他编码人员阐明您的意图:

if ((a = b)) 
{
    // do something
}

要记住的一个好规则是,如果您必须思考 10 秒以上才能理解一个条件,也许还有另一种表达方式。

【讨论】:

  • 用另一对大括号包围条件不会做任何事情。所以我不会说你是在向他们展示你知道你在做什么。如果您想对其他编码人员说些什么,请使用 cmet 或更明显正确的代码。
  • @justin 为什么有无用的括号?这恰恰相反,它向其他人表明你不知道你在做什么!
  • @svick 它们是括号 () 而不是一对大括号 {}
  • @Fraser,是的,你是对的,我总是很困惑什么术语指的是什么类型的括号。
  • 我肯定会想超过 10 秒,为什么你的代码使用双括号。
【解决方案2】:

没有什么大魔法!

这里,赋值返回的值就是被赋值的值。

在你的情况下,它是(a = 10) => 10 => 非零 => 因此是“真”!

所以,它总是返回 true

【讨论】:

  • 不行,Java会抛出异常:Type mismatch: cannot convert from int to boolean
【解决方案3】:

这绝对是可怕的,在你检查一个条件的情况下,你不要尝试做一个分配。我什至不确定这是否会起作用,以及 if 语句的结果是什么。

要么这样做:

if ( a == 10 ){ /* do stuff */ }

或者这样做:

a = 10;
if ( /* condition here */ ){ /* do stuff */ }

我相信你把单 = 误认为双 ==。

编辑:

为了应对您更复杂的情况,您必须在 if 语句中放置布尔值(取决于编程语言,这将返回或不返回错误)。在不返回布尔值的 if 语句中放置任何其他内容实际上是一件坏事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2021-03-15
    • 2011-07-17
    • 2015-08-03
    • 2014-08-11
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多