Lee*_*Gup 3 scheme types racket
我是球拍的新手,我需要作为编写一些程序的作业.检查参数的类型是一种好习惯吗?例如,更好的是:
(define (add x y)
(+ x y)
)
Run Code Online (Sandbox Code Playgroud)
要么
(define (add x y)
(unless (number? x)(raise exception))
(unless (number? y)(raise exception))
(+ x y)
)
Run Code Online (Sandbox Code Playgroud)
我可以考虑一下:类型检查会使异常更早被抛出,并且更容易找到.但它使代码更复杂,更不易读.
专业球拍代码倾向于为此目的使用合同,通常是出口模块.合同既可以作为文档,也可以保证在正确的输入上调用函数并生成正确的输出.
他们还将"责怪"违反合同条款的代码.
对于您的示例,您可以在模块中编写如下的合同:
(provide (contract-out [add (-> number? number? number?)]))
Run Code Online (Sandbox Code Playgroud)
然后当其他模块试图add错误地使用该功能时,它们将受到指责.像这样单独编写契约是很好的做法,因为它将实现和代码规范分开.
也就是说,除非您正在学习软件工程课程并编写大型程序,否则这可能只是让人分心.所以对于你的任务,不要打扰.
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |