我一直不明白为什么我们使用这样的语法:
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
为真当且仅当expr1
和 expr2
中至少有一个为真”)更可取。
总而言之:我们不希望在所有情况下都进行替换,并且不可能完全准确地推断在哪些情况下替换有意义。由于对代码进行推理应该很容易,因此根据 90% 的程序员不知道或不理解的规则,实现一个可能会或可能不会应用替换的系统会在某些情况下导致混淆行为,因此不是一个好主意.
关于logic - 为什么编程语言不使用简化的 bool 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188935/