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

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

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

2791 次点击
所在节点    程序员
32 条回复
chesha1
360 天前
我喜欢写成 1 ,但是有的 ide 会提示我改成 2 ,尤其是是 pycharm ,clion 好像没这么提示过
churchill
360 天前
THAT MAKE NO SENSE
ltyj2003
360 天前
我会把 flag 命名为 isXxx ,然后用第二种写法。
MoYi123
360 天前
具体的代码是怎么样的?
inverted logic 看起来像是让你把
if ( not flag) { A } else { B } 改成
if (flag) { B } else { A }
xloger
360 天前
我用的 Kotlin ,第一种写法只有在 flag 为可空类型的时候用,这时候理解起来比较直观。
然后第二种写法,如果是 Kotlin 是可以 if(flag.not()) 的,虽然我觉得 !flag 写法也没啥问题的。有些代码检查我觉得是过度了,单个判断用 ! 我觉得没问题,如果是 !flag && !flag2 这种我才觉得问题比较大。
Yuanlaoer
360 天前
要说直观肯定是第一种,第二种如果把你这里的 flag 取一个更直观的名字,比如 `if (FOO.isAllowed)` 也行

要说推荐写法的话,可以参考使用较广的语言和开源库的代码,以及公司的代码范式。比如谷歌家几乎各语言都有
bthulu
360 天前
当然是第一种更简单直观了
luzemin
360 天前
当然是 2
365473321
360 天前
给 Bool 类型写个扩展:
extension Bool {

var isTrue: Bool {
self == true
}

var isFalse: Bool {
self == false
}
}
thinkershare
360 天前
我们公司的统一个规范是一律采用第二种,将第二种理解为不为真,不管什么情形,布尔类型都不与 true/false 比较相等性。
不过这个纯粹是个人喜好,团队里面约定一个就好了,保证代码风格审查都用统一的就行。
via
360 天前
@ltyj2003

$isFalse = $var === false;

if ($isFalse === true) {
// ...
}
hauibojek
360 天前
@MoYi123 确实应该是你这个意思。 我误解了
ltyj2003
360 天前
@via 没太看明白哈,为啥要叫 isFalse ,我想是根据业务来起名,isPowerOn ,isEarthDestroyed 这样子。
marcong95
360 天前
!flag 这种写法的感叹号太没存在感了,本来感叹号可能是在各种符号里是最窄的了。但是 flag == false 又感觉太长了,JS 的 linting 里还普遍推荐用===。窃以为还是 Python 的用 and/or/not 关键字代替符号更加合理
thinkershare
360 天前
不过我们最近开始更换为 is true/ is false 这种新写法。
lululau
360 天前
讲个笑话,曾经有个同事极力反对使用 Java 8 Stream API ,说「 Stream API 比如 for 循环直观易懂」😂
V2Q
360 天前
@lululau 极力反对 还直观易懂
shuxhan
360 天前
如果只有一个判断,我会选择 2 ,例如 if(!isMob){},如果多个判断我用 1 ,一层层往下更清晰
linvaux
360 天前
习惯用 1 ,第 2 种取反的脑袋还要转一下
Building
360 天前
第一种遇到 #define false true 的怎么办?

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

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

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

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

© 2021 V2EX