11.2.2.2 测试列表
我们将要测试的函数是广义(generalized,是百度翻译的,不知道到底是什么意思)的版本,输出多字组成的名字;不同的是,函数结果返回名字,而不是打印。结果是有两个列表的元组:一个包含多字的名字,另一个包含单个词的名字。在函数的术语中,这个操作称为分区(partitioning),我们使用来自标准的F# 库中的List.partition 函数,很容易就能实现...
分类:
其他好文 时间:
2015-01-09 17:30:49
阅读次数:
153
11.2.2 测试结构相等
在C# 中,测试复杂数据结构的相等可能非常棘手。如果我们构造一个新的对象,具有相同的属性,使用== 运算符比较两个对象,其结果很可能是false,因为我们比较的是两个不同的实例。
在C# 中,== 运算符可以被重载,Object.Equals 可以重写,但通常只用于值类型或不可变数据结构。比较可变类型的两个不同实例时,识别两者之间的不同,是很重要的,因为数据可...
分类:
其他好文 时间:
2015-01-09 15:33:26
阅读次数:
122
11.2.1.1 在 F# 交互环境中测试程序
我们演示自始至终的整个过程,将使用与前一节PrintLongest 和PrintMultiWord相类似两个函数,但这一次,我们用F# 实现。从清单11.7 中可以看到,我们使用交互式控制台的方式略有不同。
清单11.7 使用xUnit.net 交互式测试代码(F# Interactive)
> #if INTERACTIVE ...
分类:
其他好文 时间:
2015-01-08 09:38:46
阅读次数:
154
11.2 测试函数式代码
无论是函数式编程,还是其他范式,都不可能完全消除错误,或阻止在修改现有代码时引入错误,这就是普遍采用单元测试背后的原因之一。好消息是,测试C# 代码时,使用的单元测试技术的大多数也都适用于F# 程序;而且,在许多方面,函数式编程和F# 的测试更容易。
为F# 选择单元测试框架
正如我们在第九章所看到的,可以用F# 写标准的类,因此,任何.NET 的...
分类:
其他好文 时间:
2015-01-07 18:57:02
阅读次数:
115
11.1.2.2 使用不可变数据结构
为了演示了以不可变风格,写相同的代码,但不一定必须使用函数式列表;即使使用标准的 List 类型,我们一样能够避免修改集合。然而,不幸的是,要确保不意外修改列表,可能很难。
处理不允许修改的类型,有更好的方法。可以使用真正不可变类型,比如,第三章的FuncList,或者 .NET Framework 中的 ReadOnlyCollection;即使使...
分类:
其他好文 时间:
2015-01-07 16:56:10
阅读次数:
132
11.1.2.1 使用可变数据结构
在清单11.4 中,可以看到两个函数,处理的集合保存了前面示例的地名。这一次,我们使用C#,把地名保存在标准的List 类型中,它是可变的。
清单11.4 处理保存在List 中的地名(C#)
List LoadPlaces() { [1]
returnnew List { "Seattle", "Prague",
"...
分类:
其他好文 时间:
2015-01-07 13:16:51
阅读次数:
131
Underscore是一个提供许多函数编程功能的库,里面包含了你期待(在Prototype.js和Ruby中)的许多功能。但是没有扩展任何内置的Javascript对象,也就是说它没有扩展任何内置对象的原型。它被定位为jQuery和Backbone.js的基础层源码注释转之网上他人之备注,特收藏以后...
分类:
Web程序 时间:
2015-01-07 10:36:16
阅读次数:
238
11.1.1 重用常见的代码块
一个最好的编程实践,就是避免在多个地方重复相同的代码。如果有两个类似程序,就值得考虑把它们合并成一个;新的程序需要有新的参数,描述代码按照不同于原来的路径。
在函数式编程中,我们有一个强大的武器:函数值作为参数值使用的能力,这使得函数或者方法的参数化更容易。为了演示,假设我们有一个关于城市的信息数据库,我们要用数据生成几份报表。
我们先写一个加载数据的函...
分类:
其他好文 时间:
2015-01-06 15:36:38
阅读次数:
241
11.1 重构函数式程序
重构是许多现代开发方法的一个主要部分。在一些语言中,这种技术也支持集成开发环境(IDE),比如,Visual Studio 中的C# 编辑器。大多数重构技术是为面向对象范式而开发的,但是,我们将从函数的角度来讨论。
重构
重构是修改源代码的过程,改善设计,但不改变其含义。重构的目标是使代码更具可读性,在未来更容易修改或扩展,或者改进其结构。一个简单...
分类:
其他好文 时间:
2015-01-05 11:13:31
阅读次数:
126
第十一章重构和测试函数式程序
本章介绍
■重构函数式程序
■使用不变性推理代码
■为 F# 程序写单元测试
■使用延迟值缓存结果
这本书的主题之一就是,函数编程理如何使解代码更容易理解,只需要通过阅读就可以;特别是在需要修改陌生程序,或者通过组合现有函数实现行为,或者重构现有的代码时,尤为重要。函数式编程更容易重构,缘于清晰度和模块化:可以改善代码,并且有信心这种改变不会破...
分类:
其他好文 时间:
2015-01-04 17:15:20
阅读次数:
136