如果(假==条件).为什么?

Sin*_*rMJ 26 c++

我收到了之前工作过的人的代码,它包含很多行

while(false==find && false == err && k<kmax)
if(true==refract(ep1,ep2,n1,RI_blood, RI_collagen))
Run Code Online (Sandbox Code Playgroud)

我最喜欢的是

if(false == (ret_s<0))
Run Code Online (Sandbox Code Playgroud)

其他代码做得非常好,记录得很好,但是这些奇怪条件的这些线条让我失望了,我想知道为什么他们这样做了.

特别是那false==(ret_s<0)是完全令人困惑的,你需要读三次这样的线来理解他们想要的东西.

这是一种常见的编程风格,难道我不理解其中的推理,还是仅仅是糟糕的风格?

编辑:我觉得这与if(object == NULL)vs if(NULL == object)类似,因为这不是关于意外分配而是关于asfuscated if子句......

Mik*_*our 57

这是一种常见的编程风格吗?

没有.

难道我不明白这个原因吗?

有些人喜欢用true或明确地比较布尔值false,即使结果是完全相同的布尔值.大概是这样的逻辑:通过使代码更难以阅读并且更令人惊讶,人们会更加思考它并对其行为做出更少的假设.或许只是代码应该很难维护,因为它很难编写.

有些人则喜欢写向后与常量比较,以防止类似的错误if (x = 5)时,你的意思if (x == 5).任何现代编译器都会警告你这个错误,所以它的唯一真正目的是使代码更难阅读.

结合这两种行为可以得出您发布的奇怪代码.

或者这只是糟糕的风格?

这是一种风格.我不是风格的判断,但是如果你想让维护程序员保持警惕,那肯定会这样做.就个人而言,我喜欢我的代码是可读的,但那只是我.

我最喜欢的是

我曾经遇到return a && !b过大约十行代码.第一行是switch(a).

  • 对于`个人来说,我喜欢我的代码是可读的,但那只是我 (20认同)
  • 我是风格的评判者,这很糟糕.;) (5认同)

Cha*_*had 39

尤达的条件

在此输入图像描述
使用if(constant == variable)而不是if(variable == constant)if(4 == foo).因为它就像是说"如果蓝色是天空"或"如果高大就是男人".


Dan*_*ite 16

它可以安全地防止在C++中进行赋值.

在C++中,这样做是完全合法的

if (foo = true) ....
Run Code Online (Sandbox Code Playgroud)

在这种情况下,单个=是赋值,将替换值foo.

这不合法,会产生编译错误

if (true = foo) ....
Run Code Online (Sandbox Code Playgroud)

  • 那么`if(!condition)` (5认同)
  • 确切..!与false ==相同,但它更容易阅读.. (2认同)
  • 当然,你不能给`(ret_s <0)`分配任何东西. (2认同)

Cor*_*son 6

常量和文字通常放在左侧,因为它可以防止意外分配.考虑输入:

if(foo == bar)
Run Code Online (Sandbox Code Playgroud)

如:

if(foo = bar)
Run Code Online (Sandbox Code Playgroud)

第二个似乎可以工作......但是默默地说道foo.如果foo是常量,则不再可能出现此错误.