15 第十五章 创建可组合函数库

来源:互联网 发布:篮球比赛软件 编辑:程序博客网 时间:2024/05/18 00:09

15 第十五章 创建可组合函数库

 

本章介绍

■ 设计函数式连接符库

■ 处理时变值

■ 组合时变值与绘图

■ 开发金融合同模型库

 

    函数式编程表现出来的很多方面的设计原则,是可组合性(compositionality)。这意味着,可以使用组合操作,从几个基元构建出复杂的结构。我们将描述一般意义上的可组合化,因为它可以以无数的形式出现。让我们看两个例子,你已经很熟悉了。

    我们首先从 F# 类型系统开始:有几个基元类型,比如整数和布尔值,而且可以组合它们,比如,使用 * 类型构造函数,构建 int * bool 元组类型。如果我们不考虑 F# 的面向对象功能,只有三种方法进行组合:使用元组的多值,使用差别联合的可选值和函数。这可以用来构建非常丰富的类型。

    可组合设计的第二个示例是处理列表的 F# 库。可以使用这个库作为灵感,来教我们如何写好函数式的库。这次所涉及的基元是从零开始创建列表的操作,那些可以将其应用到现有的列表,如 List.filter、 List.length,等等。我们可以单独使用基元,但更常见的是,把它们组合成一个列表处理单元,使用流运算符 (|>)。这种组合的设计也是声明式(编程)的基本要素。我们能够描述想通过组合基元、或者以前生成的派生的组件,达到什么目的。

    我们在这一章的主要例子是创建动画库。我们使用自下而上(bottom-up)的方法,描述这个库。这意味着,我们讨论本章的大部分都是非常简单的。将看到几个基元,有表示随时间改变的值,也有表示绘图的简单方法。可组合库的好处在于,每个组件容易生成、理解和测试。重点在于,我们什么时候开始把这些构建块放到一起。在这种情况下,我们不仅组合相同的领域的基元,而且把两个领域放到一起:随着时间的而变的绘图,实际上是定义动画。这有点像使用  LINQ to XML,这是 XML API,设计用来处理 LINQ to Objects 的。一旦能够以自然的方式组合库,代码会更可读和灵活。

    显示这种方法效果,可以用商业世界,以及像动画的游戏示例,我们将以这样的示例结束这一章,用可组合和函数方式描述金融合同。

原创粉丝点击