我应该改变传入的属性还是分配其结果?

时间:2015-04-22 04:05:55

标签: functional-programming

假设我需要一个将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是“更干净”,因为整个操作是在方法内部进行的,而不是在内部(做算术)和外部(分配结果) )。

1 个答案:

答案 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);