# 五、总结

“Visual F#是一种强类型、函数优先的编程语言，用于编写简单的代码来使用 Visual Studio 和解决复杂的问题。NET 框架。F#旨在减少现代企业中计算引擎和数据丰富的分析服务等软件组件的部署时间和复杂性。”[<sup>【66】</sup>](IFP_0010.htm#_ftn66)

我们经常听到“减少时间”和“减少复杂性”这些词，以至于它们现在基本上没有意义。这是正确的，因为除了烤面包机之外，很少有其他技术能真正节省时间并降低复杂性——大多数技术倾向于将时间和复杂性管理推给其他东西，而且，与任何编程语言一样，“其他东西”是开发人员的技能。

当然，在读了比雅尼·斯特劳斯特鲁普的《C++编程语言》几周后，我正在写我的第一个面向对象的 C++应用，但是我做得好吗？当然不是。当我开始做 C#开发时，我热切地期待着像 C++中不存在的反射这样的特性，同时抱怨缺少模板。但同样，使用界面、事件等的细微差别是我必须学习的技能。令人高兴的是，我在 C#诞生之初就开始使用它，因此我的技能已经能够随着语言的发展而发展，编写 LINQ、lambda 表达式以及其他在 C# 4.0 和 5.0 中发现的概念。

C# 3.0 引入了函数式编程，包括 lambda 表达式和查询表达式。看起来 C# 6.0 将继续增加函数式编程风格支持，增加属性和方法表达式。

没有一种函数式编程语言是容易学的。函数式编程语言往往非常“符号丰富”，有时甚至很难理解一行代码。阅读函数类型的定义也很重要，虽然类型推断会有很大的帮助，但也会使它变得混乱。

因此，如果您想减少应用开发过程中的时间和复杂性，您必须对该语言有深入的了解。对于像 F#这样的函数式编程语言，这意味着不仅要学习语法，还要学习不同的思维方式。希望这本书在这个问题上提供了一些指导。

函数式编程有*和*两个方面有可能减少开发时间，两者都是不变性的直接结果。第一，没有副作用，意味着函数是潜在的“可证明正确的”数学方程。给定相同的输入，函数将返回相同的结果。对其他需要关注的功能没有副作用，每个功能本身都不会受到副作用的影响。在我看来，副作用，以及更普遍的状态管理，是一些最难充分测试的东西，导致了人们常说的一句话“我不知道它为什么这么做。”不变性的第二个结果是编写多任务、异步操作变得容易。可变结构需要同步。对于像 F#这样的语言，同步不是问题，因为结构是不可变的。

在这两种情况下，语言本身促进了直接影响实现的编码风格，导致应用的自然“正确性”和轻松异步执行操作的能力。随着计算机被生产出更多的物理和虚拟处理器，随着程序员开始利用图形处理器中的大量并行处理流，拥有一种隐含地导致“正确性”并支持异步计算的语言对于即将到来的数据挖掘任务和多个信息流的实时处理至关重要。

在我看来，这是像 F#这样的函数式编程语言的最大优势，也是学习如何“函数式”思考的充分理由