下面的代码尝试打印出可被 2 整除的数字“是偶数”。
不应该是 if (test) then() 而不是:if (!test) then(),当测试的条件是“n % 2”时。下面的代码似乎是“IF numbers are NOT divisible by 2, print out 'number is even'”,这似乎不符合逻辑。
更一般地说,在指定条件时,编写 Unless 函数比使用 If 语句有什么优势,而我们可以简单地编写 if (!condition)?
非常感谢任何帮助。
function unless(test, then) {
if (!test) then();
}
function repeat(times, body) {
for (var i = 0; i < times; i++) body(i);
}
repeat(5, function(n) {
unless(n % 2, function() {
console.log(n, "is even");
});
// → 0 is even
// → 2 is even
// → 4 is even
最佳答案
这个有争议的优点是代码读起来更像英语:“除非 n modulo 2 不为零,向控制台记录 n 是偶数。”
根据我的经验,这样做的实际后果是大多数程序员在感到满意之前必须仔细检查 unless() 实际做了什么。因为它不是标准的 Javascript 片段,所以他们无法知道它是否使用 !或 ==true 或 ===0 或其他一些略有不同的测试,除非他们去查看实现。
关于这一原则,我最喜欢的例子是 COBOL。该语言非常努力地模仿英语,因此即使是非程序员也可以使用它……但实际上,程序员和非程序员似乎都讨厌使用它。
关于javascript - 除非 vs if 在 Javascript 中使用感叹号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28120525/