函数式编程中数据结构和变量的不变性
immutability of data structures and variables in functional programming
通常说在函数式编程中数据结构是不可变的。我知道不可变数据结构是不能改变的数据结构。
但是,是否也意味着变量引用也不能改变?
例如,
var arr = [1,2,3]
arr = [4,5,6]
在这段代码中,我没有更改数组 [1,2,3],而是创建了一个新数组。尽管如此,我还是更改了变量 'arr' 的引用。这段代码是否遵循数据结构不变性原则?
您不应该重新分配引用。理想情况下,您会创建一个新变量,这样您就可以看到您所做的任何更改的 "before and after"。
底层结构仍然可以是不可变的,即使指向它的引用发生了变化。如果有人正在查看旧版本的结构,重新分配引用不会损害数据的有效性,因为旧版本仍然存在,没有变化。
Does it also mean that variable references also can't be changed?
是的。那时它们被称为 constants。你最好写
const arr1 = [1,2,3]
const arr2 = [4,5,6]
这种方法还允许您将范围环境视为不可变数据结构,这应该是默认设置。它使对您的代码的推理变得容易得多。
通常说在函数式编程中数据结构是不可变的。我知道不可变数据结构是不能改变的数据结构。
但是,是否也意味着变量引用也不能改变?
例如,
var arr = [1,2,3]
arr = [4,5,6]
在这段代码中,我没有更改数组 [1,2,3],而是创建了一个新数组。尽管如此,我还是更改了变量 'arr' 的引用。这段代码是否遵循数据结构不变性原则?
您不应该重新分配引用。理想情况下,您会创建一个新变量,这样您就可以看到您所做的任何更改的 "before and after"。
底层结构仍然可以是不可变的,即使指向它的引用发生了变化。如果有人正在查看旧版本的结构,重新分配引用不会损害数据的有效性,因为旧版本仍然存在,没有变化。
Does it also mean that variable references also can't be changed?
是的。那时它们被称为 constants。你最好写
const arr1 = [1,2,3]
const arr2 = [4,5,6]
这种方法还允许您将范围环境视为不可变数据结构,这应该是默认设置。它使对您的代码的推理变得容易得多。