71.scala编程思想笔记——按契约设计
2016-01-04 22:06
169 查看
71.scala编程思想笔记——按契约设计
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50458775
源码下载连接请见第一篇笔记。
按契约设计(Designby contract,DbC)思想提出可以归功于Eiffel编程语言的创造者Bertrand Meyer,Scala从汲取了按契约设计的精神。按契约编程关注设计错误,它会验证参数和返回值在运行时是否与设计过程中确定的规则相一致。
Scala包含用作按契约编程工具的类似方法require和assume.
Require或assume的失败表示存在编程错误,意味着没有任何希望继续执行了,可以决定以最佳方式报告该错误并退出程序。
例如:
importcom.atomicscala.AtomicTest._
importutil.Try
classContractual {
def f(i:Int, d:Double) = {
require(i > 5 && i < 100,
"i must be within 5 and 100")
val result = d * i
assume(result < 1000,
"result must be less than1000")
result
}
}
deftest(i:Int, d:Double) =
Try(new Contractual().f(i, d)).recover{
case e => e.toString
}.get
test(10,99) is 990.0
test(11,99) is
"java.lang.AssertionError:" +
"assumptionfailed: " +
"resultmust be less than 1000"
test(0, 0)is
"java.lang.IllegalArgumentException:" +
"requirementfailed: " +
"imust be within 5 and 100"
前置条件通常会查看方法参数,在执行该方法体的主要部分之前,先效验它们是否在有效的或可接受的值集范围内。
后置条件正确情况下会检查方法调用的结果,并且会用assume方法对其进行测试,如果测试失败将抛出AssertionError.
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50458775
源码下载连接请见第一篇笔记。
按契约设计(Designby contract,DbC)思想提出可以归功于Eiffel编程语言的创造者Bertrand Meyer,Scala从汲取了按契约设计的精神。按契约编程关注设计错误,它会验证参数和返回值在运行时是否与设计过程中确定的规则相一致。
Scala包含用作按契约编程工具的类似方法require和assume.
Require或assume的失败表示存在编程错误,意味着没有任何希望继续执行了,可以决定以最佳方式报告该错误并退出程序。
例如:
importcom.atomicscala.AtomicTest._
importutil.Try
classContractual {
def f(i:Int, d:Double) = {
require(i > 5 && i < 100,
"i must be within 5 and 100")
val result = d * i
assume(result < 1000,
"result must be less than1000")
result
}
}
deftest(i:Int, d:Double) =
Try(new Contractual().f(i, d)).recover{
case e => e.toString
}.get
test(10,99) is 990.0
test(11,99) is
"java.lang.AssertionError:" +
"assumptionfailed: " +
"resultmust be less than 1000"
test(0, 0)is
"java.lang.IllegalArgumentException:" +
"requirementfailed: " +
"imust be within 5 and 100"
前置条件通常会查看方法参数,在执行该方法体的主要部分之前,先效验它们是否在有效的或可接受的值集范围内。
后置条件正确情况下会检查方法调用的结果,并且会用assume方法对其进行测试,如果测试失败将抛出AssertionError.
相关文章推荐
- (转载)java程序的几种类型
- python入门(二)
- Django更新后的配置修改
- 70.scala编程思想笔记——定制错误报告机制
- 69.scala编程思想笔记——使用Try转换异常
- 68.scala编程思想笔记——使用Option
- C++模版-重载,嵌套
- 67.scala编程思想笔记——使用Either
- 66.scala编程思想笔记——构造器和异常
- C/C++之回调函数
- phpcms V9 数据模型基类
- 65.scala编程思想笔记——用过异常进行错误处理
- 安卓捕获应用的运行时异常并保存代码
- 64.scala编程思想笔记——使用元组的模式匹配
- 63.scala编程思想笔记——引用和可修改性
- 62.scala编程思想笔记——映射表
- 61.scala编程思想笔记——集
- 60.scala编程思想笔记——将序列与zip相结合
- 59.scala编程思想笔记——列表和递归
- php随手记