第二章函数编程的核心概念
本章介绍
■了解概念和基础
■不可变数据编程
■函数式代码的推论
■函数式值和数据类型
如果你问三个函数程序员,什么是函数范式最基本的方面,很可能有三个不同的答案。原因是函数编程已经存在很长时间了,各种不同的编程语言应用范围很广泛;每种语言强调的重点不同,但对于其他的语言来说,可能并不重要;但其中的大部分概念在所有的函数式语言中都有所表现。
本章的中央部分侧重于这些共同的概念,探讨函数式程序员工具集的基本特征和技术。我们将宏观地研究这些概念,你将看到如何组合起来,形成连续的方式解决问题。
我们首选讨论函数式程序如何表示、改变程序状态。在面向对象编程中,状态由对象承载,而在函数编程中,函数和数据类型担趣了这个关键角色;接下来,我们会看到支持声明式编程风格的语言功能,我们在第一章曾介绍过;最后,我们将讨论类型,看类型是如何帮助验证程序正确性的。这个方面不是所有函数语言都支持的,但却是许多语言的核心(包括 OCaml、F# 和 Haskell)。这种类型检查非常先进,在许多方面不同于 C# 中使用过的。
我们还不会过多地进行编程,只是大致了解一些主要概念,以及有关函数程序的更好感觉。补充材料“接下来本章讲什么?”给出了本章结构的概览。我们在第一章讨论过一些概念,但只关注结论,在本章,我们会分析其原理。
接下来本章讲什么?
第一章,我们关注两个概念:不可变性和声明式风格,这里,我们将介绍一些使其成为可能的语言功能;还将讨论类型,这是这本书中的另一个基本概念。
在 2.1 节,我们将首先讲一点函数编程的题外话,探讨一下其数学背景。阅读这一节不是必须的,但可能很有意义,因为它说明了许多概念的源头;之后,将回到更具体的函数编程,讨论不可变的数据结构,以及如何用来写程序(2.2.3 节);在 2.3.2 节,我们先看一下用函数语言写声明式代码的基本功能,比如高阶函数(higher-order function);我们还会看到,在 F# 中,类型如何防止许多常见的编程错误(2.4.4节)。
这一章我们关注函数编程的概念。首先探究其理论基础,会忽略所有的细节,使用一个简单的示例来解释核心概念。