虽然函数式编程肯定是优雅的,但是,你可能更感兴趣的是其实用目的:作为一种通用的风格,是有用的,在某些问题域中,它肯定更出色。我们已经看到的例子,比如,第四章绘制饼图的应用程序,和第十一章简单的照片浏览器,这些示例的主要目的,是为了演示特定的概念和技术。
第四部分则不同。在每一章,我们将花大量时间讨论实际问题,使用最适当的 F# 特点和函数式编程来解决。这些代码将使用我们到目前为止学到的多种功能,限制在一章中讨论,会比较复杂。
函数式编程在两个领域有明显优点:异步(asynchronous)和并行(concurrent)编程。
在第十三章,我们将讨论有关异步编程,在大型现代数据驱动编程的环境中,我们将以异步方式获取数据,以交互方式浏览其结构,用 Excel 呈现结果。
在第十四章,我们会把注意力放到并行编程,这是函数式编程的亮点:不可变性规避了修改共享状态的问题,所以,函数式风格的程序更容易并行化。
在第十五章,我们将探讨使用组合(composition)的原理,开发函数式库。迄今为止,我们所见过的很多函数式功能,都是利用这种原理构建的。其概念是,我们提供少量的、容易理解的、能够以非常丰富的方式进行组合的基本操作;然后,用这些基本操作去构建复杂的结果,而不必描述任何实现的细节。为了演示设计的库是遵循这一原则的,我们将创建一个描述动画的库,还会简要介绍一个有关金融的例子。
在第十六章,我们将讨论需要响应不同事件的应用程序。这是一个广泛的主题:事件可能由用户界面生成,也可能来自需要收集用户信息,并向用户展示数据的后台任务。
在第十三章和第十六章,我们将使用的 F# 功能,是很难用 C# 写的,所以,这些示例将只使用 F#;第十四章和第十五章,只构建在顶级函数式编程标准方面,比如不可变性、高阶函数,或者关注可组合的代码。这样,大部分的代码可以用 F# 和 C# 来写,不像本书的前面部分,通常只使用 C# 演示具体的概念,现在,我们写的代码更加接近实际,使用函数式概念来激发设计,解决业务问题。