如何向开发人员解释添加额外的if - else如果条件不是"提高"可读性的好方法?

Lil*_*lit 9 performance coding-style

最近我碰到了以下C++代码:

if (a)
{
  f();
}
else if (b)
{
  f();
}
else if (c)
{
  f();
}
Run Code Online (Sandbox Code Playgroud)

其中a,b和c都是不同的条件,并且它们不是很短.

我试图将代码更改为:

if (a || b || c)
{
  f();
}
Run Code Online (Sandbox Code Playgroud)

但是作者反对说我的改变会降低代码的可读性.我有两个论点:

1)你不应该通过用三个替换一个分支语句来增加可读性(尽管我真的怀疑使用else而不是||可以使代码更具可读性).

2)这不是最快的代码,没有编译器会对此进行优化.

但我的论点并没有说服他.

你会告诉程序员编写这样的代码吗?

您是否认为复杂条件是使用其他而不是OR的借口?

小智 21

这段代码是多余的.它容易出错.

如果你有f();一天要用别的东西取而代之,你就会有一个错过的危险.


虽然这三个条件机构有一天可能会变得不同,但你可能会有这样的动机,你可以为这种情况做好准备.如果有可能会发生这种情况,那么可以做一些类似的事情.但我建议遵循YAGNI原则(你不需要它).不能说已经编写了多少臃肿的代码而不是因为真正的需要,而是期待明天需要它.实践表明,这不会在应用程序的整个生命周期中带来任何价值,但会大大增加维护开销.


至于如何向你的同事解释它,已经多次讨论过.看这里:

你怎么告诉别人他们写错了代码?

如何向同事证明他们制作了糟糕的代码?

你如何处理团队成员的低质量代码?

"导师"高级程序员或同事没有侮辱

  • Codism,如果你遵循那个逻辑,那么你就可以在任何地方编写像这样的代码****,总有一天你可能*必须引入这样的分支.荒谬.代码YAGNI风格(你不需要它)并只生产你所知道的(或很可能)你需要的东西. (4认同)
  • +1是对问题的正确答案.在我自己的(非常主观的)推理中,OP和开发人员都应该改变他们的编程风格并使用一个函数,清楚地说明该函数的功能. (2认同)

Lie*_*ers 12

用一个函数替换三个复杂条件,明确为什么f()要执行它.

bool ShouldExecute; { return a||b||c};
...
if ShouldExecute {f();};
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 (2认同)

phk*_*ler 5

由于条件很长,让他这样做:

if ( (aaaaaaaaaaaaaaaaaaaaaaaaaaaa)
  || (bbbbbbbbbbbbbbbbbbbbbbbbbbbb)
  || (cccccccccccccccccccccccccccc) )
{
    f();
}

一个好的编译器可能会将所有这些转换为相同的代码,但上面是这类事物的常见构造.3次调用同一个函数很难看.