7.1契约和边界

像商业合同(契约)一样,软件的契约是两个部分之间的协议。这个协议指定了权利和义务来规范一个部分到另外一个部分。
因此契约在两部分之间建立了一个边界。当一个值通过边界,契约监视系统会执行契约检查,确保遵守固定的契约。
为了达到这个目的,racket鼓励在模块边界使用契约。程序员可以在provide语句上添加契约,给导出值添加约束。

  #lang racket
  (provide (contract-out [amout positive?]}
  (define amount ...)

上面的模块对所有的调用者承诺amount值总是一个正数。每当一个调用者引用了amount值,契约监视器都会确认它是不是一个正数。
契约模块内建在racket语言里,但是如果你只是想使用racket/base,你需要使用require语句导入。

7.1.1违反契约

违反契约会发送一个错误。使用and/c可以写多个合同。

7.1.2测试模块和契约

我们可以使用子模块来测试契约。

7.1.3测试内嵌契约边界

  #lang racket
  (define/cnotract amount
    (and/c number? positive?)
    150)
  (+ amount 10)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,511评论 19 139
  • 数学函数有一个领域和范围。领域代表能够接受的参数,范围代表产生的值。传统表示方法如下 f:A->B 程序语言的函数...
    jarod_chan阅读 823评论 0 0
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 22,376评论 7 278
  • 大院里有一个女孩子,从头到脚一匀的胖乎。她常年留着最普通的短发,每天一副男生的装扮,不论冬夏,总是穿着件衬衣,衣服...
    李在在阅读 355评论 0 1
  • LM8 大家好,今天开了一天的会议,会议上主要介绍了公司正在研发的各种新产品以及和合伙公司业务上的对接新流程以及标...
    sophia夏阅读 270评论 0 0

友情链接更多精彩内容