2.2 评价函数程序

现实世界的函数编程:有 F# 和 C# 示例 1-02-02

2.2 评价函数程序

     第 1 章中,我们学习了函数程序使用不可变数据结构表示数据的状态,函数方法使事情不可变,不仅影响数据结构(在 C# 中的类),而是也扩展到本地变量。

    我们不会感到惊讶,如果你想知道该程序可以做什么,当所有一切都不可变时。简短的回答是,函数程序的语句,不是用来改变状态的,而是用来计算的。在本节中,我们会停留在揭示这种计算方式的编写。让我们开始处理变量的简单代码。

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 节会回到本主题。首先,让我们看看不可变值与我们在第 1 章中讨论的不可变类型的概念有怎样的关系。

你可能感兴趣的:(C#,F#,职场,休闲,函数编程)