【问题标题】:Is there a convention for setting variables based on arguments?是否有基于参数设置变量的约定?
【发布时间】:2012-04-19 20:46:03
【问题描述】:

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

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;

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

【问题讨论】:

  • 如果参数命名恰当,则第二个参数也一样可读。但是,这在很大程度上是个人喜好问题。

标签: c++ conventions


【解决方案1】:

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

也就是说,我也倾向于建议不要将布尔值作为参数传递。 foo(true);foo(false); 的真正含义很少立即显而易见。通常最好使用枚举,这样您就可以得到foo(do_this);foo(do_that);

【讨论】:

  • 第一段——完全是我的想法。
  • 枚举非常适合,我同意。现在我想起来了,如果他们使用第一个,我可能会对其他人的代码做出同样的反应。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    if (condition)
       return true;
    else
       return false;
    

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

    【讨论】:

    • 公平地说,我在现场看到了if(condition==true) { return true; } else { return false; }:S
    • 我认为它可能有相反的 else if 有时代码太糟糕了它伤害了
    【解决方案4】:

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

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

    【讨论】:

    • 下划线让我觉得我在看一些可怕的链接器制作脚本,(颤抖!)。
    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-12-06
    相关资源
    最近更新 更多