您的位置:首页 > 编程语言

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.

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: