我收到了之前工作过的人的代码,它包含很多行
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)
.
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(foo == bar)
Run Code Online (Sandbox Code Playgroud)
如:
if(foo = bar)
Run Code Online (Sandbox Code Playgroud)
第二个似乎可以工作......但是默默地说道foo
.如果foo
是常量,则不再可能出现此错误.
归档时间: |
|
查看次数: |
4484 次 |
最近记录: |