大家觉得判断布尔值的时候那种写法更直观?

360 天前
 hauibojek
  1. if (flag == false) {}
  2. if (!flag) {}

我一般用 2 的写法,但是今天用一个代码检查工具(oclint)提示 inverted logic 。 其他语言有没有官方的推荐写法

2791 次点击
所在节点    程序员
32 条回复
param
360 天前
看情况。第二种情况,当 flag 为 null 的时候也生效
leegradyllljjjj
359 天前
又搁这儿研究茴香豆呢?
layxy
359 天前
这个得看哪种语言,js 类语言 2 比较好,对于布尔类型有默认值的语言 2 也可以,没默认值 2 可能就不行了
zzl22100048
359 天前
@V2Q 比如 -》不如
johnnyyeen
359 天前
第一种语法描述的更加精确,exactly+specifically ,含义不容易产生歧义。
forest997
359 天前
@lululau #16 Stream API 好用,但不好 debug
jifengg
359 天前
var flag = false;
if ( flag = false ){
console.log('=>false');
}else{
console.log('=>true');
}


首先猜猜上面打印的是啥?
阅读上是第一种比较直观。
但是编写的时候很容易出现上面这种 bug 。
而这种情况大部分语言都是支持的所以编译的时候都不会报错。
tsanie
359 天前
@jifengg 虽然我也会用 2 ,但是一般情况下你说的这种情况编译器会报 warning ,例如 Assignment in conditional expression is always constant; did you mean to use == instead of = ?

当然不管 warning 那就没救了
Xhack
359 天前
if(Boolean.TRUE.equals(flag)){
// ……
}
bocchi1amos
359 天前
@ltyj2003 一样,常写 isEmpty ,isNumber ,isxxxx
xuld
359 天前
不管每个人是怎么想的,客观事实上:
- 写成 flag == false 的好处是:更直观,更容易理解。
- 写成 !flag 的好处是:更短。此外如果写成 flag == false ,那为了保持对称,是不是也应该用 flag == true

所以结论很简单:分两类人:
第一类人理解 !flag 比较吃力,他们会认为 “flag == false 更好理解,推荐用法”
第二类人觉得理解 !flag 没那么吃力,他们追求更短,以及更利于记忆的对称性(而这些恰恰是第一类人所不能理解的)。

人的能力本来就是有区别的,强制用 !flag 会让第一类类人不爽(不好理解),强制用 flag == false 会让第二类人不爽(更麻烦了),因此不需要有推荐用法。
但如果实在需要确定一个团队里的统一写法的话,应该是优先照顾第二类人,因为第二类人才是团队的主力。
chutianyao
359 天前
血泪教训,生产环境建议使用 1,养成好习惯.

某次技改,改动原有代码逻辑,需要将 flag==flase 的判断全部改成 flag==true,但是有些地方使用第二种写法,夹在一大堆代码中遗漏了,CR 也没看出来,造成生产事故.

一个!夹杂在大量代码中,确实非常容易遗漏. 所以后面我都改成
if(false == flag)这种写法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1004136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX