布尔什么时候比整数更好?

时间:2010-12-24 20:48:05

标签: boolean theory int

在大多数编程语言中,可以使用10代替TrueFalse。但是,根据我的经验,整数似乎总是更容易使用。

以下是我的意思的一些例子:

if x is True: x = False
else: x = True

VS

x = abs(x-1)

__

if x is False: a = 0
else: a = 5

VS

a = 5*x

在什么情况下,布尔数比1或0更简单/更有效?

9 个答案:

答案 0 :(得分:11)

您应该始终在高级语言中使用任何布尔内置类型作为布尔值。你的第二个例子是在x为真,但等于1的值不同的情况下进行调试的恐怖,并且对于任何不熟悉代码的开发人员来说都是一个棘手的问题 - 尤其是那些不熟悉的人你的编码风格。

有什么问题
x = !x;

a = x ? 5 : 0;

答案 1 :(得分:7)

一个整数可能比布尔值更高效的示例将在关系数据库中。一个位列通常不能被索引(我不一定能代表该语句中的所有数据库,因此“通常”),所以如果需要索引,像tinyint这样的东西会更有意义。

请记住,根据使用情况和使用它的系统,布尔“占用更少的空间”,因为它只是一个位(取决于实现),整数是硬件的本机字大小。 (某些系统可能会使用一个完整的单词作为布尔值,实际上在金属上运行时基本上不会占用空间,只是为了使用简单的单词大小。)

在高级编程语言中,boolean和int之间的选择实际上更多的是代码可读性/可支持性而不是效率。如果值确实限于“true”或“false”,那么布尔值是有意义的。 (此模型是否处于给定状态,例如“有效”,或者不是?它永远不会是第三种选择。)另一方面,如果目前有两个选项,但可以总有一天,使用布尔值(甚至只是“现在”)可能很诱人,但从逻辑上讲,使用int(或枚举)更有意义。

在代码中执行“聪明”的事情时,请记住这一点。当然,做一些快速的数学运算而不是使用布尔值可能看起来更时尚,更酷,但这对代码的可读性有什么影响?太聪明可能很危险。

答案 2 :(得分:6)

为了获得可读性和良好意愿,选择布尔值为真/假是更好的选择。

你知道你只有两种可能的选择。对于整数,事情可能会有点棘手,特别是如果你使用0作为false而其他任何事情都是真的。

使用整数表示true / false时,你会变得太聪明,所以要小心。

使用布尔值将使您的意图在6个月后更加清晰,以及其他维护您代码的人。你必须使用的脑循环越少越好。

答案 3 :(得分:4)

我会在你的例子中说布尔版本更具可读性(至少就你的意图而言)。这一切都取决于背景。如果你为了进行微观优化而牺牲了可读性,那就是邪恶的。

答案 4 :(得分:1)

我不确定效率,但在很多情况下我更喜欢布尔值。

你的第一个例子很容易写成x = !xx = abs(x-1)看起来真的很模糊。

同样在使用整数时,你不能确定x是1而不是2或-5或任何东西。使用布尔值时,它总是正确或错误。

答案 5 :(得分:0)

使用布尔值总是更有效,因为它更容易处理并使用更少的处理/内存。尽可能使用Boolean

答案 6 :(得分:0)

布尔人显然只能接受真/假或0/1,不仅仅是他们使用较少的处理能力和内存,正如Webnet已经说过的那样。

答案 7 :(得分:0)

除了性能要点之外,我认为布尔值和整数是编程中两个根本不同的概念。 Boolean表示条件,整数表示数字。如果你没有严格保持整数布尔值0或不是0的值,那么容易引入错误,当你可以使用布尔值时,为什么还要麻烦,这允许编译时安全性/类型检查?我的意思是,采取一种方法:

doSomething(int param)

该方法单独执行/不/暗示param被解释为布尔值。没有人会阻止我将1337传递给它,并且没有人会告诉我如果我这样做会发生什么 - 即使有明确记录不将1337值传递给方法(但只有0或1),我仍然可以做它。如果你可以在编译时防止错误,你应该。

doSomething(bool param)

只允许两个值:true和false,两者都没有错。

另外,关于为什么整数优于布尔值的例子有点瑕疵。

if x is True: x = False
else: x = True

可以写成

x != x

而你的整数替代:

x = abs(x-1)

需要我知道:

  • x可以有哪些可能的值
  • abs()函数的作用
  • 为什么从x
  • 中减去1
  • 这实际/做了什么/。它做了什么?

你的第二个例子对我来说也很重要。

if x is False: a = 0
else: a = 5

可以写成:

a =(x)? 5:0;

而你的整数替代

a = 5*x

再次要求我知道:

  • 什么是X?
  • X可以是什么?
  • 如果x = 10,会发生什么? -1? 2147483647?

条件太多了。使用布尔值,既可读性,常识又无错误,可预测的代码。

答案 8 :(得分:0)

我喜欢布尔,更具可读性,而且你基本上强迫与用户签订合同。

E.g。 “这些值仅为真或假”。