logic - 为什么编程语言不使用简化的 bool 表达式?

标签 logic programming-languages language-design

我一直不明白为什么我们使用这样的语法:

if (a == b || a == c)

什么时候可以简化成这样:

if (a == b || c)

这是编译器的问题还是什么?我们真的可以不解释这样的一串代码并让它工作吗?

最佳答案

没有任何技术限制会导致不可能(甚至太难)实现一种处理 a == b || 的语言c 作为 a == b || 的快捷方式a == c。问题是几乎(?)不可能仅在符合预期的情况下制定规则。

例如考虑表达式 result == null || fileIsClosed 其中 fileIsClosed 是一个 bool 值。程序员肯定不会期望这会被视为 result == null ||结果 == fileIsClosed。您可以提出其他规则,例如“仅当 || 的右操作数不是 bool 值时才应用替换”,但是如果您执行 booleanResult =,则替换也不起作用= possibleResult1 || possibleResult2。事实上,关于这个例子,唯一能告诉我们程序员是否打算进行替换的就是变量的名称。显然,编译器无法从变量名中推断出含义,因此不可能在每种情况下都做用户想要的事情,制定没有异常(exception)的简单规则(如“expr1 || expr2 为真当且仅当expr1expr2 中至少有一个为真”)更可取。

总而言之:我们不希望在所有情况下都进行替换,并且不可能完全准确地推断在哪些情况下替换有意义。由于对代码进行推理应该很容易,因此根据 90% 的程序员不知道或不理解的规则,实现一个可能会或可能不会应用替换的系统会在某些情况下导致混淆行为,因此不是一个好主意.

关于logic - 为什么编程语言不使用简化的 bool 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188935/

相关文章:

r - 根据条件从数据帧创建具有二进制值的 df

programming-languages - 带有逻辑 OR 的 if 语句

java - 为什么 Java 在泛型方面有下限?

java - James Gosling 解释为什么 Java 的字节是有符号的

algorithm - 查找模式的递归解决方案

c - 如何用半加器构建一个全加器?

parsing - 解析器 DCG 不具有确定性是否合适?

programming-languages - Stack Overflow 的 404 多语言中使用了哪些语言?

programming-languages - 用连字符分隔的大小写的名称是什么?

java - 为什么 Java 允许接口(interface)具有静态只读字段而 .NET 接口(interface)不能?