一步中的分配和条件评估

时间:2010-01-07 18:16:20

标签: grails groovy

我有这段代码

def errorMap = validateParams(params)
if (errorMap) {
    flash.errorMap = errorMap
    return
}

我的问题是:我可以将第1行中的分配和第2行中的条件评估结合起来,形成如下所示的单行:

if (flash.errorMap = validateParams(params)) {
   return
}

这样做是不好的做法?

由于

Vijay Kumar

4 个答案:

答案 0 :(得分:1)

我们在C语言中被灌输,单个等于“=”应该看起来像if语句中的拼写错误。使用单等于你的意思的语法会更难发现拼写错误的情况。

虽然你当然可以做到这一点,但我自己的两分钱是因为这通常是一种不好的做法。它很简洁,但你的if语句现在依赖于对赋值的评估,当你回来并在几个月后重新访问这段代码时,这可能不会立即显现。

答案 1 :(得分:0)

在我看来,这是一个非常好的练习。调用函数并测试其返回值应该一起考虑,并将它们放在源代码中有助于实现这一点。如果你习惯性地这样做,基本上不可能无意中调用该函数,但是忽略代码检查它是否成功。

答案 2 :(得分:0)

如果这是C ++或C#代码,您可以组合分配和评估条件。绝对肯定要避免使用赋值(=)而不是比较(==)。你可以浪费时间搞清楚。

另外,请注意使用修改其参数的条件。

例如, if(x ++> 100)doStuff()

VS

if(x + 1> 100)doStuff()

答案 3 :(得分:0)

虽然隔离的代码看起来精确而优雅,但if-clause中的赋值运算符(=)更可能被忽略为更普遍的比较运算符(==),这将导致更多问题。

我不会在实践中使用它。它可以成为一个很好的多项选择问题。