当我第一次开始编程时,我开始使用的语言没有布尔(或者,也许他们已经做了,我只是不知道他们)但是,我只是使用一个整数设置为0或1 ,对于虚假或真实。这对我来说很好。
所以我的问题是,是否有一些特定的原因可以创建布尔?
答案 0 :(得分:1)
TL; DR:您投入编程语言的类型和静态类型安全越多,就越难以产生误解(您和编译器之间的潜在错误,使其成为可执行程序,未被发现。专用布尔数据类型是添加到编程语言中的一种显而易见且重要的类型,因为逻辑真值出现在任何地方(if
,==
,!=
,<
,{ {1}},>
,&&
等。)
在像C这样的语言中没有逻辑真值的专用数据类型(又称布尔值),或者没有明确区分它和整数的类型:
||
此测试的结果是什么?
如果要将三个数字0 == (1 == 2) ? "succeed" : "fail"
,0
和1
进行比较以获得相等性,那么它应该2
,因为它们显然不相等。或者,
如果要比较两个数字"fail"
和1
是否相等,那么第一次测试是否失败/是否为假(2
),那么它应该{{ 1}}。
这种模糊性很容易出现在编程语言中,这些语言不能提供很多静态类型安全性。它可能导致编程错误(又称错误),不是因为编程语言的翻译器不知道如何处理它,而是因为你和编译器可能对它的含义有不同的看法。即使你确切知道应该如何根据语言规则解释测试,接管维护代码的其他人可能不太了解情报,误解代码并更改代码(即make错了)。
静态类型系统应该可以防止这种歧义,因此从一开始就减少了错误的可能性。每个表达式都分配了一个特定的静态类型(0
的类型为"succeed"
,3
的类型为int
,3.141
的类型为double
,{{ 1}}具有类型3 + 141
,依此类推),其静态类型决定了如何将该表达式与其他表达式结合起来。
例如,C#编程语言(相当强大的静态类型并具有专用的int
数据类型)强制执行以下类型规则:
3 == 141
,bool
或bool
等整数文字的类型为0
。1
始终具有2
类型(无论子表达式int
和a == b
具有什么类型)。bool
和类型a
都没有定义允许将b
表达式与int
表达式进行比较的运算符bool
。 这三条规则导致编译器拒绝表达式==
为无效,因此您无法从中创建可执行程序,并且在可能产生影响之前已经阻止了潜在的错误。