`
tianshibaijia
  • 浏览: 1125842 次
文章分类
社区版块
存档分类
最新评论

8.3.3 F# 代码的进一步演变

 
阅读更多

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 章中讨论过,它对于表示数据非常重要。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics