假设我需要一个将1
添加到给定数字的方法。在函数式编程范例中,这两种方法中的哪一种更正确?
选项A:不可变分配
function addOneToB(input) { return input + 1; }
var a = { b: 5 };
a.b = addOneToB(a.b);
选项B:纯粹的突变
function addOneToB(input) { input.b++ }
var a = { b: 5 };
addOneToB(a);
在我看来,这两个选项都足够纯粹用于严格的FP,但感觉选项B是“更干净”,因为整个操作是在方法内部进行的,而不是在内部(做算术)和外部(分配结果) )。
答案 0 :(得分:3)
你不应该做任何这些事情 - 两者都在改变a
,所以两者都不是"纯粹的"。
在第二个版本中,"功能"甚至改变它的论点而不是返回一个值。
这是一个纯粹的"第一个版本的版本:
function addOne(input) { return input + 1; }
var a = { b: 5 };
var c = { b: addOne(a.b) } ;
和第二个:
function addOneToB(input) { return { b: input.b + 1}; }
var a = { b: 5 };
var c = addOneToB(a);