最近听同事分享了解到一个专业词汇,断言式编程或者有些人说是防御式编程。
这个思想就是,程序中会有很多种状态,有些状态的组合是绝对不可能出现的,但是抛开上下文单纯从这段代码来看,还是有可能会发生的,这种情况下可以使用断言(assert),表示这种状态是绝对不可能的,如果发生了,请将程序 kill。
这个概念在刚接触编程的时候我内心是无感的,为什么 kill 掉程序,这样用户体验不是不好吗(当然断言可以在 release 模式下不起作用)?但其实编程久了,我发现程序就是关于处理状态的,当状态多的时候,维护和继续开发就会很困难。而一种避免维护太多状态的“偷懒”方式就是使用断言,表示某些状态组合是绝对不可能存在的。
好处就是在开发阶段如果程序挂在一个断言处了,由于这种状态我们预期是绝对不可能出现的,说明我们的预期不对,或者代码哪里有问题,并能在开发阶段解决掉。
当然坏处也是有的,想象一下我们写的代码中到处是断言,一看就会很不舒服,断言太多意味着,或许这些地方需要更好的设计模式,也有可能我们对状态的定义出了问题。
最后,如果你在开发中很少使用断言的话,可以尝试一下。这会让你的代码运行的更加平稳。
网友评论