我最近不得不维护一个遗留项目,代码很乱,没有编码模式,但有一件事引起了我的注意,在某些情况下,布尔类型是以三种不同的方式创建的:
const bool = true; //conventional
const bool = 1;
const bool = !0;
我知道没有编码模式是代码嗅觉,但我想知道使用不同于常用的练习有什么好处吗?某些编译器或解释器的性能提升?我真的被这个煽动了。你想知道是否有人知道它吗?
答案 0 :(得分:1)
使用true和false。其他任何事情都不那么明确。
你写了一行代码。你会读几百遍。
答案 1 :(得分:1)
您应该始终使用常规方式来定义布尔值,即true
和false
(就像Bathsheba已经提到的那样)。
在 JavaScript 中,大多数值会导致if条件中的truthy值。此规则的例外是以下值(source):
false
0
(零)""
(空字符串)null
undefined
NaN
(一个特殊的数字值,意思是非数字!)你的例子:
const bool = true; // the regular way to define a boolean
const bool = 1; // a Number, this is truthy in an if-condition, but still, it is just a Number
const bool = !0; // negates a number -> it actually converts it to a boolean during the negation. So, it is actually the same as bool = false;
如果你是用另一种语言编程,那么并不总是有布尔人。如果你正在编写的编程语言中有一个布尔值,你肯定应该使用它。
一些例子:
true
和false
),还有一个布尔包装类,它还包含转换方法等。({ {1}}和Boolean.TRUE
)。其他值无法在if条件中进行评估。Boolean.FALSE
和0
进行比较。它与JavaScript类似,因为除了以下(source)之外,它还将大多数值评估为真实的:
1
0
'0'
undef
#Empty scalar ''
#清空列表()
答案 2 :(得分:1)
这篇文章专门针对C / C ++,虽然反映了大多数语言。
C ++标准声明(§4.7/ 4):
如果源类型为bool,则值false将转换为零和 值true将转换为一个。
它们全部被允许的原因仅仅是由于编译器将'truthy'值转换为单个位表示的方式。
在运行编译器时,它们都占用相同的空间。该约定的原因仅仅是为了可读性 - 因此,并非所有“编译器有效”表示都应被视为同等优选。如Google's C++ Style Guide中所述:
优化读者,而不是作家
我们的代码库(以及最多 提交给它的个别组件预计将继续 很长一段时间因此,阅读大部分时间将花费更多时间 我们的代码比写它。我们明确选择优化 我们的普通软件工程师阅读,维护和管理的经验 在我们的代码库中调试代码而不是在写入时轻松 代码。
简而言之,可读性就是一切。