布尔类型的最佳实践是什么

时间:2017-01-16 19:02:28

标签: boolean

我最近不得不维护一个遗留项目,代码很乱,没有编码模式,但有一件事引起了我的注意,在某些情况下,布尔类型是以三种不同的方式创建的:

const bool = true; //conventional
const bool = 1;
const bool = !0;

我知道没有编码模式是代码嗅觉,但我想知道使用不同于常用的练习有什么好处吗?某些编译器或解释器的性能提升?我真的被这个煽动了。你想知道是否有人知道它吗?

3 个答案:

答案 0 :(得分:1)

使用true和false。其他任何事情都不那么明确。

你写了一行代码。你会读几百遍。

答案 1 :(得分:1)

您应该始终使用常规方式来定义布尔值,即truefalse (就像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;

如果你是用另一种语言编程,那么并不总是有布尔人。如果你正在编写的编程语言中有一个布尔值,你肯定应该使用它。

一些例子:

  1. Java 中,有原始数据类型boolean(truefalse),还有一个布尔包装类,它还包含转换方法等。({ {1}}和Boolean.TRUE)。其他值无法在if条件中进行评估。
  2. Perl 中,没有布尔值。但是,您可以使用数字值Boolean.FALSE0进行比较。它与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中所述:

  

优化读者,而不是作家

     

我们的代码库(以及最多   提交给它的个别组件预计将继续   很长一段时间因此,阅读大部分时间将花费更多时间   我们的代码比写它。我们明确选择优化   我们的普通软件工程师阅读,维护和管理的经验   在我们的代码库中调试代码而不是在写入时轻松   代码。

简而言之,可读性就是一切。