首页 > 代码库 > 2.2.1 使用不可变值
2.2.1 使用不可变值
2.2.1 使用不可变值
函数程序第一个常见功能是很少儾使用典型的变量,这与我们从其他编程语言所了解不同。主要的差别在于,函数语言更喜欢用不可变的变量,即变量值一旦初始化后,就不能改变。因此,再称为“变量”就相当不合适了,函数程序员通常称为“值”。
我们用一个示例来说明,说要写一个取初始值的程序,再从控制台读两个数字,将初始值加上第一个数字,再将结果乘上第二个数字。在 C# 中,通常的做法是这样的:(我们使用几个假想的方法 GetInitialValue()、ReadInt32() 和 WriteInt32(),如果你想运行这个程序,实现也很简单):
int res = GetInitialValue();
res = res + ReadInt32();
res = res * ReadInt32();
WriteInt32(res);
我们声明变量 res 保存初始值,然后,使用从控制台读取的输入值,两次修改它。现在,我们看一下同样的代码实现,但无需修改任何变量的值:
int res0 = GetInitialValue();
int res1 = res0 + ReadInt32();
int res2 = res1 * ReadInt32();
WriteInt32(res2);
因为我们没有修改第一个变量的值,每当我们想要计算新的值(res0、res1、res2)时,就声明一个新变量。两者的主要区别在于,在第二个示例中,我们没有使用赋值运算符(在 C# 中,写作等号),在第二个示例中,唯一一次出现这个符号,是在初始化变量值的时候,但它的含义不同于赋值运算符。我们不改变现有变量的值,而是用指定的初始值,创建新的变量。
使用值,在许多方面不同于变量,因此,“值”不仅是名词上的变化,而且概念不同。基于这个原因,在本书的后面,我们都使用函数术语,但你有时可能会发现,比较变量和值是很有用的。我们还将使用“值绑定”,它表示值的声明,把这个值指定给(绑定到)符号。
用不可变值代替变量,需要我们以不同的方式去表达很多问题,我们会在 2.2.3 节再回到这个主题。现在,我们先看看不可变值与我们在第一章讨论的不可变类型的概念有怎样的关系。