8.3.3 F# 代码的进一步演变
来源:互联网 发布:adobe网络设计师 编辑:程序博客网 时间:2024/05/20 08:22
8.3.3 F# 代码的进一步演变
在上一节中,我们从一段简单的 F# 代码,它存储一个函数的列表,到更复杂的版本,使用记录的列表。这正是我们第 1 章中讨论的 F# 开发过程的一部分。我们学习过, F# 程序通常是非常简单的脚本开始,演变成标准的遵循 .NET 编程准则的代码,好处来自 .NET 对象模型。
我们开始用最简单的方法来解决问题,仅使用我们在开头所知道的。当我们后来意识到需要添加报表,使用另一个函数,我们相对较小地调整了代码(因为,在 F# 中,这是很容易做到的),结果,版本有了更多的功能。转换不只是在功能方面,而且还表现在可读性和可维护性上。
在扩展初始版本时,我们提到过,可以使用一个包含函数元组的列表。像这样的表述,在最初的原型上使用的,比在已完成的应用程序上更有可能,使用 F# 记录类型明显使代码更具可读性。即使我们直接使用记录类型,记住,当你开始写变成一个复杂的产品的应用程序时,用简单的方法表示,是不错的。在 F# 中,这种改变是很容易做到,当开发最初版本时,通常想要尽快地运行有用的功能,而不是用可靠的方式。
尽管我们已经完成了这个健壮的应用程序的版本的几个转换,但仍要考虑改善。因为 F# 是一种 .NET 语言,我们可以使用几个面向对象的功能,以使代码更 .NET-friendly。在下一章,我们会回到这个主题,可以看到,如何把记录转换成 F# 的接口类型,对应于 C# 的接口。
C# 中的组合行为
我们以 C# 代为例码开始了这一章,声明有一个方法的接口表示检查,但然后,我们使用函数(和 Func 委托)作为写代码更方便的方法。如果我们想要实现一个程序,处理两种函数,像我们现在已在 F# 中做的,可能会立即转回接口。在 C# 中,使用接口肯定是更方便、更合理,比使用元组或以函数作为其成员的类。已经说过,在 C# 中,我们有两个选项:用于简单行为的函数,或者,对于更复杂的接口。
在 F# 中,在表示形式之间的转换更简单。最重要的是,由于类型推断,我们不必改变源代码中各处的类型。此外,把 lambda 函数转换成类的变化,要比添加另一个函数的变化更大。在第 9 章,我们将看到,在 F# 中,也可以使用 .NET 接口表示组合行为。即使在使用接口时,有方便的方法将 lambda 函数转换成任何可以看作是一个"lambda 对象"的东西。这个功能的名字叫对象表达式(object expression),我们将在下一章讨论。
在这一章,我们主要关注以行为中心的应用程序,但在介绍中我们解释过,以数据为中心和以行为为中心的方法经常一起使用。现在,我们将看到,组合有联合类型的函数,在第 7 章中讨论过,它对于表示数据非常重要。
- 8.3.3 F# 代码的进一步演变
- 8.3.3 F# 代码的进一步演变
- 代码的演变随记
- 基于服务的企业集成模式轻松入门,第 2 部分: 进一步介绍基本概念的演变
- WarShall算法--图的传递闭包(进一步演变成flayd算法)
- #猜猜看#进一步完善代码
- SDK代码的优化和消息机制的进一步学习
- 学习JDK源码:可进一步优化的代码
- 写更少代码,进一步简化你ListView的Adaptor
- 已知f[0]=f[1]=1 f[2]=0 f[n]=f[n-1]+f[n-3] 求 f[0]~f[50]的最大值
- 回答f-word兄弟的简单代码。
- F# 3.0 BUILD讲座的示例代码
- F分布的C/C++代码
- webservice的进一步理解
- 进一步学习的内容
- AutoResetEvent的进一步分析
- 结束语 进一步的研究
- 数组的进一步使用
- Java中使用密钥库和算法创建数字证书
- ubuntu-10.04.2-desktop-i386.iso mark
- java正则表达式应用总结
- WinDbg 和 Dump 文件的使用
- c面试题
- 8.3.3 F# 代码的进一步演变
- Java正则表达式入门
- Extjs 右下角弹出框 可弹出多个 冒泡小窗体
- tao
- 扩展eXtremeTable的属性
- Configure,Makefile.am, Makefile.in, Makefile文件之间关系
- Display the google map in jQuery ui dialog
- vi
- 电脑编程技巧与维护杂志社供稿一篇