0

假设我有一个带有标志或其他东西的函数:

void foo (Param p1, Param p2, bool setVariable)
{
    //if setVariable is true, set some bool var to true, else false
}

是否有强烈偏好以下各项?

if (setVariable)
    _someClassVariable = true;
else
    _someClassVariable = false;

或者

_someClassVariable = setVariable;

显然,第二个打字更少,但第一个让我觉得更具可读性。哪一个会更受欢迎?

4

4 回答 4

3

我会选择第二个,它同样具有可读性。可读性更多的是变量的名称,而不是两个选项的选择。如果变量和参数有好的名称,那么赋值就会很自然。这类似于从您不会执行的函数返回布尔值:

bool conditionHolds() {
    if (condition)
       return true;
    else
       return false;
}

(如果您正在考虑这样做,请重新考虑)

于 2012-04-19T12:44:55.507 回答
3

我一般更喜欢第二种。对我来说,第一个将是一个强烈的警告,即编写代码的人充其量只能勉强胜任。

也就是说,我也倾向于建议不要将 bool 作为参数传递。很难立即看出foo(true);vs.的foo(false);真正含义。通常最好使用枚举,这样你就可以得到foo(do_this);vs了。foo(do_that);

于 2012-04-19T12:46:03.930 回答
2

我更喜欢第二个。如果减少打字对你来说还不够,还要考虑你同事的意见。如果我看到类似的东西,我个人会笑

if (condition)
   return true;
else
   return false;

在生产代码中。(假设变量是布尔值,并且您没有使用它来实现某些强制转换机制)。

于 2012-04-19T12:45:03.417 回答
2

后者要好得多, if else 看起来毫无用处,并在代码和编译器生成的代码生成中引入了额外的复杂性(尽管可能已优化掉)。

我也会避免使用前导下划线符号,其中一些名称是为标准库和编译器保留的。

于 2012-04-19T12:45:11.357 回答