9.2 改进以行为为中心的应用程序
在前面几章,我们已经展示了函数编程的几个基本概念,可以组合起来,获得所需的结果。在讨论构造数据类型的方法时,我们已经看到了这的示例,有元组、函数、差别联合和记录类型。
创建以行为为中心的应用程序,我们使用函数类型表示行为,它可以与其他类型组合。例如,使用记录类型可以在一个值中保存两个相关的函数。...
分类:
其他好文 时间:
2014-12-10 16:29:54
阅读次数:
173
9.1.2 使用类型扩展追加成员
在上一节我们提到过,可以为任何 F# 数据类型添加成员;现在,我们将使用差别联合来演示。这种种方法能够添加成员,而不需要修改任何原始代码。这样,我们将能够保留原始类型和原始的函数声明,不作修改,然后添加成员。
我们将扩展第五章声明 schedule 类型的示例,这个类型表示的事件可以只发生一次,或重复发生,或从不发生。除了数据类型之外,我们还创建了计算...
分类:
其他好文 时间:
2014-12-10 16:28:30
阅读次数:
210
9.2.1 使用保存的函数记录
使用记录保存函数,是 OCaml 中的常用方法,在 F# 中有所扩展。在看到可能的改进之前,清单 9.7 为第八章的原始解决方案提供了提醒功能。
清单 9.7 用函数的记录检查客户 (F#)
type ClientTest =
{ Check : Client –> bool
Report : Client-> unit...
分类:
其他好文 时间:
2014-12-10 16:26:50
阅读次数:
136
9.1.1 添加成员到 F# 类型
现在,F# 迭代式开发就派上用场了。交互式调试和测试代码的能力,在开发的早期阶段更重要;随着代码更加完善,就要考虑与其他开发人员共享项目,把通用的操作提供作为成员,可以使用点表示法来调用,变得更加重要。
这就是说,在 F# 中,把数据类型与操作封装一起,通常是开发过程的最后一步。这可以使用成员(members)来完成,可以添加到任何 F# 类型中,行为...
分类:
其他好文 时间:
2014-12-10 10:50:33
阅读次数:
155
9.1 改进以数据为中心的应用程序
我们回顾一下前面章节中讨论的以数据为中心的应用程序一些内容。第七章,我们讨论了以数据为中心的应用程序的关键是数据结构的设计。函数语言对数据结构的构造提供了非常简单、概念明确思考办法。我们已经学习了所有基本的数据类型,元组、差别联合和记录;还学习了声明泛型类型,实现了在不同程序中重用;讨论了 F# 库中的一些类型,如选项类型和函数式列表。
到目前为止,我...
分类:
其他好文 时间:
2014-12-09 17:56:34
阅读次数:
155
第三部分 F# 高级编程技术
在第二部分,我们讨论了大多数函数语言常见的函数概念。现在可以说已经理解了函数式编程,就像在阅读了封装、继承和多态性以后,可以说熟悉面向对象编程一样;但要想成为有效的面向对象的开发人员,还需要学习其他内容,用 F# 进行函数编程也没有什么不同。
就像每种面向对象语言的功能各有特色一样,在 F# 中也有一些特有的功能,在其他函数语言中通常没有,当我们在第九章讨论...
分类:
其他好文 时间:
2014-12-09 12:25:14
阅读次数:
177
第九章 把值转变成 F# 带成员的对象类型
本章介绍
■声明带成员的类型
■以函数方式使用接口
■写类和接口类型
■从 C# 中使用 F# 代码
我们在第一章介绍 F# 时曾说过,F# 是一种多范式语言(multiparadigm language),它吸收了几种语言中最好的部分;最重要的是,它从函数式和面向对象的语言中吸取了思想。在本章,我们要看到来自面向对象编程灵感的几...
分类:
其他好文 时间:
2014-12-09 12:17:55
阅读次数:
121
8.5 第八章小结
在这一章,我们完成了核心的函数概念的探索。在讨论了基本原理,比如函数式值和高阶函数之后,我们以更宏观的观点,讨论了函数式应用程序的体系结构。我们把应用程序(或组件)划分成两组:以数据为中心和以行为为中心。
在这一章,我们讨论了以行为为中心的程序。看到了如何开发应用程序,行为不需要硬编码,在以后可以轻松地添加新的行为,既可以在开在发过程中,也可以在运行时,只需通过使用函...
分类:
其他好文 时间:
2014-12-06 16:53:27
阅读次数:
168
8.4.3 C# 决策树
在第五章,我们讨论过 F# 的差别联合和 C# 中的类层次结构之间的关系。在此示例中,我们将使用另一个种类层次结构表示决策树的节点,派生两个额外的类来表示两种不同情况(最后结果和查询)。
在函数式版本中,所有的处理逻辑都是在 testClientTree 函数中分别实现的。我们以面向对象的风格,使用访问者模式(visitor pattern)(在第七章讨论过),...
8.4.3.1 模板方法模式
一般来说,模板方法模式能够定义算法或类的骨架,在以后填充缺失的部分,在具体的继承类中实现。基类定义的操作后来被填充,用来实现更复杂的操作。图 8.4 以图表形式显示了这一点。
图 8.4 基类包含抽象方法 PrimitiveOperation,用于实现 TemplateMethod。缺失部分由继承的类 ConcreteClass 填充。...
分类:
其他好文 时间:
2014-12-06 11:25:13
阅读次数:
177