javascript - 除非 vs if 在 Javascript 中使用感叹号?

标签 javascript function oop if-statement conditional-statements

下面的代码尝试打印出可被 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/

相关文章:

javascript - 从html文件中的按钮从另一个文件触发JS函数

javascript - 使用 JavaScript 在 <div> 中打印多个 <p> 标签

javascript - 迭代 HTMLcollection 以动态定义构造函数中的值?

javascript - iframe 内容在 Firefox 上消失

javascript - 在javascript中从数组中删除特定对象

Swift函数,一个参数有两个名字

java - 奇怪的构造,java将静态方法转换为类

java - Java中如何调用同一个类的方法?

javascript - promise 良好实践

javascript - 使用模块模式和实例化新对象之间的区别