我需要在工作中在数组中创建很多实体,有人对我说使用 this library to use "pattern matching"在我的拉取请求中,而不是手动创建数组并填充它。
我们必须创造很多东西,例如。用户:
function createUser(id){
return {
id: id
}
}
var users = createStuff(createUser, 50);
我做了什么来填充:
function createStuff(createFunction, howManyTimes){
var createdStuffs = [];
for(var i = 0; i < howManyTimes; i++){
createdStuffs.push(createFunction(i));
}
return createdStuffs;
}
他要求我用模式匹配做什么:
function createStuff(createFunction, howManyTimes){
return howManyTimes.matches(
(x = 0) => [],
(x) => [createFunction(x)].concat(createStuff(createFunction, x - 1))
)
}
这种模式匹配有什么好处?我确实理解他的示例中的递归调用,它取代了 for 循环,但我认为我的示例更容易阅读,尽管所有创建逻辑基本上都是在他的示例中写在一行中。
我正在询问对此的解释,大多数人告诉我“它更好,因为功能齐全并且移动部件更少”,这是真的吗?我不同意他的观点,我需要解释或论证来证明他是错的
最佳答案
您的同事采取了非常正确的前提,即不变性和函数式风格是有益的,并得出了一个非常错误的结论,即任何采用函数式风格的不可变解决方案都是优越的。可读性在任何范式中并且都很重要。
使用 underscore.js 的正确功能解决方案具有所有好处,而且不会出现任何令人眼花缭乱的可读性问题:
var users = _.map(_.range(howManyTimes), createUser);
关于javascript - 为什么 JavaScript 上的 for 循环比模式匹配更糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278240/