在过去的几年里,我经常偶然发现 Javascript 代码,它让我想起了旧的“Perl”编程时代,并且在 if/else 子句上使用了布尔术语。这通常会导致每行代码更短且复杂度更高(有时会创建不必要的默认值或空循环)。
我不想讨论这是好还是坏的做法:-)
但我很好奇这种紧凑的“布尔式”风格是否有名字?
每行长/相当“冗长”/较低的复杂性:
function sum(a) {
if (!Array.isArray(a)) {
// No array
return 0;
}
if (a.length === 0) {
// Empty
return 0;
}
var sum = 0;
for (let i = 0; i < a. length; i++) {
sum += a[i];
}
return a;
}
类似的结果,使用三元求值和 ES5“函数式”编程:
// Would we call this "functional" programming? Not sure.
const sum = (arr) => (
Array.isArray(arr) ? arr.reduce((before, value) => before + value, 0) : 0
);
更短,使用布尔评估:
// How to call this (professionally)?
const sum = (arr) => (
(arr || []).reduce((before, value) => before + value, 0)
);
请注意,在最后一个示例中,代码对于人类读者来说是最短的,但它也可能创建一个“不必要的”数组,甚至评估空循环,即可能会消耗更多的内存和更多的处理工作。
只是出于演示目的的快速破解,没有真实世界的例子!