1. 防御式编程
对于 “防御式编程” ,《代码大全》给我们提供了一个定义:
人类都是不安全、不值得信任的,所有的人,都会犯错误,而你写的代码,应该考虑到所有可能发生的错误,让你的程序不会因为他人的错误而发生错误。
程序需要对可能的错误输入,你需要作出预防。预防的手段可以有如下两种:
-
做出兼容,允许本轮执行。(例如,参数字符串不允许为 null,如果传入 null,我给它一个默认值:"",以替代它的原始值 null)
-
错误提示,终止本轮执行,提示重新再来。
简而言之,防御式编程,就是持怀疑态度审视所有的代码:「总有刁民想害朕」。
2. 契约式编程
什么是 “契约式编程” ?
简单的说,契约作用于两方,每一方都会完成一些任务,从而促成契约的达成,但同时,每一方也会接受一些义务,作为制定契约的前提,有任意一方无视了必尽义的义务,则契约失败。
契约式编程要求我们在「前提条件」、「后继条件」和「不变量条件」进行契约的检查。类似的,例如检查参数,一旦参数不对,当即撕毁契约。
契约所约束的,是「一个为了确保程序正常运行的条件」,一旦契约被损毁,只有一个原因,那就是程序出了 Bug。
例如,一个参数,在我处理的时候,必须保证是不为空的。那么谁来保证这一点呢?一定是我的调用方(或者说是其它模块),所以,一旦出现问题,应该由调用方来检查,确保调用的时候,必须是不为空的。
契约式编程可以严格区分责任,让每个人都不必为了迁就他人的错误而进行「艰难的编码」。每个人按照契约处理好自己的事情,让损毁契约的人承担责任。
网友评论