函数式编程中数据结构和变量的不变性

时间:2017-01-16 12:28:03

标签: functional-programming immutability

它通常说在函数式编程中数据结构是不可变的。我知道不可变数据结构是一种无法改变的数据结构。

但是,是否也意味着变量引用也无法更改?

例如,

  

var arr = [1,2,3]

     

arr = [4,5,6]

在这段代码中,我没有改变数组[1,2,3],而是创建了一个新数组。不过,我改变了变量'arr'的引用。此代码是否遵循不变性数据结构的原则?

2 个答案:

答案 0 :(得分:1)

您不应该重新分配参考文献。理想情况下,您可以创建一个新变量,这样您就可以看到您所做的任何更改的“之前和之后”。

但是,即使指向它的引用发生了变化,底层结构仍然可以是不可变的。如果某人正在查看旧版本的结构,重新分配引用将不会对数据的有效性造成任何损害,因为旧版本仍然存在,未更改。

答案 1 :(得分:1)

  

是否也意味着变量引用也无法更改?

是。然后它们被称为常量。你最好写

const arr1 = [1,2,3] 
const arr2 = [4,5,6]

此方法允许您将范围环境视为不可变数据结构,这应该是默认值。它使您的代码的推理变得更加容易。