首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳风格练习:避免在条件句中否定?

最佳风格练习:避免在条件句中否定?
EN

Software Engineering用户
提问于 2022-06-20 21:31:44
回答 2查看 302关注 0票数 0

基本问题:我想知道是否有任何行业实践或风格指南提到这两种风格中哪一种更好:

代码语言:javascript
复制
if x == 0 //or nullptr

代码语言:javascript
复制
if !x

(我在考虑编程语言,对于相同的变量x,这两种样式在语法上是允许的,语义上是等价的)。

我一直喜欢x==0,因为它减少了思考的数量。你需要对x可以是什么,以及这些否定会变成什么,进行推理。这种行为在所有编程语言中也不是一致的。!x的唯一好处就是减少了代码的数量。也就是说,对于更长、更复杂的条件,否定可能会更好,因为对于所有的等价物,代码都会变得太大、太丑了。

EN

回答 2

Software Engineering用户

发布于 2022-06-20 22:58:17

表达意图

驱动原理应该是明示意图,也就是你真正想要达到的目标。这使得代码自明

将这一原则应用于具有零导联的整数比较,毫无疑问地适用于x==0x!=0。这比从精神上转换为布尔值要简单得多。

有某种编码风格的指南吗?

在非常强类型的语言中,整数不能隐式转换为bool。不需要编码样式,编译器会说服你,如这个Swift示例所示:

代码语言:javascript
复制
let x : Int = 12
if !x {           // Error: Type Int cannot be used as a boolean. test for ==0 instead. 
    print ("x is false")
}

对于更灵活的类型化语言,如C和C++,据我所知,在C和C++中没有流行的指导--或反对--这种风格。甚至在米斯拉这样的安全标准上也没有。

原因是与使用此快捷方式的数百万行代码向后兼容。这些行中有许多是在布尔人将其写成真正的内置类型之前编写的。当整数变量表示布尔值时,这是有意义的,但在其他情况下,使用更紧凑的版本没有好处。编写==0将产生相同的代码,如果它是关于整数值的,那么它将更具可读性。

(重要的remark__:现在,这个成语仍然流行于非数字类型。)while(cin)if (!cin)作为流行的idom用于检查流是否处于有效或错误状态。放弃这个成语可能会造成比它解决更多的混乱。它甚至可能导致错误的代码,如果您想用while(cin)替换while(!cin.eof()),因为流语义。)

票数 2
EN

Software Engineering用户

发布于 2022-06-21 08:36:10

在使用了大量的C和C++代码(其中if(x)if(!x)用于测试指针或整数x是否有效)多年之后,我习惯了这个成语,再也看不到与if(x!=0) of if(x==0)有很大的区别了。所以我在这里的建议是不要想得太多--我只会避免在这两种风格之间切换太频繁。当与有特定偏好的队友一起工作时,要保持妥协的意愿。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/439367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档