在大多数编程语言中,可以使用1
和0
代替True
和False
。但是,根据我的经验,整数似乎总是更容易使用。
以下是我的意思的一些例子:
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更简单/更有效?
答案 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 = !x
而x = 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)
需要我知道:
你的第二个例子对我来说也很重要。
if x is False: a = 0
else: a = 5
可以写成:
a =(x)? 5:0;
而你的整数替代
a = 5*x
再次要求我知道:
条件太多了。使用布尔值,既可读性,常识又无错误,可预测的代码。
答案 8 :(得分:0)
我喜欢布尔,更具可读性,而且你基本上强迫与用户签订合同。
E.g。 “这些值仅为真或假”。