【问题标题】:Why were booleans created?为什么要创建布尔值?
【发布时间】:2017-01-11 21:50:36
【问题描述】:

当我第一次开始编程时,我开始使用的语言没有布尔值(或者,也许它们有,但我只是不知道它们)尽管如此,我只是使用了一个设置为 0 或 1 的整数,用于虚假或真实。这对我来说效果很好。

所以我的问题是,创建布尔值是否有某些特定原因?

【问题讨论】:

    标签: boolean


    【解决方案1】:

    TL;DR:您在编程语言中加入的类型静态类型安全越多,就越难造成误解(潜在的错误)在您和编译器之间,使其成为可执行程序,未被检测到。专用的布尔数据类型是添加到编程语言中的一种明显且重要的类型,因为逻辑真值无处不在(if==!=<>&&、@ 987654327@等)。


    在像 C 这样的语言中,没有专门的逻辑真值数据类型(又名布尔值),或者没有明确区分它和整数类型:

    0 == (1 == 2)  ?  "succeed"  :  "fail"
    

    这个测试的结果是什么?

    • 如果是比较012这三个数字是否相等,那么应该是"fail",因为它们显然不相等。或者,

    • 如果它比较两个数字12 是否相等,然后第一个测试是否失败/是否为假(0),那么它应该是"succeed"

    这种歧义很容易出现在不提供太多静态类型安全的编程语言中。它可能导致编程错误(也称为错误),不是因为编程语言的翻译器不知道如何处理它,而是因为您和编译器可能对它的含义有不同的想法。即使确切地知道应该如何根据语言规则解释测试,接管维护您的代码的其他人也可能不太了解情况,误解您的代码并更改它(即错了)。

    静态类型系统应该防止这种歧义,因此从一开始就减少潜在的错误。每个表达式都分配了一个特定的静态类型(3 的类型为 int3.141 的类型为 double3 + 141 的类型为 int3 == 141 的类型为 bool,等等),它的静态类型决定了如何将该表达式与其他表达式组合。

    例如,C# 编程语言(它是相当强的静态类型并具有专用的bool 数据类型)强制执行以下类型规则:

    • 012 等整数文字的类型为 int
    • 表达式a == b 始终具有bool 类型(无论子表达式ab 具有什么类型)。
    • int 类型和 bool 类型均未定义允许将 int 表达式与 bool 表达式进行比较的运算符 ==

    这三个规则导致编译器将表达式0 == (1 == 2) 视为无效而拒绝,因此您无法从中创建可执行程序,并且在它可能产生影响之前已经防止了潜在的错误。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 2014-03-16
      • 2021-05-21
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多