如果你必须为防御性编码选择你最喜欢的(聪明的)技术,它们会是什么?虽然我目前的语言是Java和Objective-C(有C++背景),但可以随意用任何语言回答.这里的重点是巧妙的防御技术,而不是我们这里70%以上的人已经知道的那些.所以现在是时候深入挖掘你的技巧了.
换句话说,试着想到除了这个无趣的例子之外:
if(5 == x) 而不是 if(x == 5):避免意外的分配以下是一些有趣的最佳防御性编程实践的示例(特定于语言的示例在Java中):
- 锁定变量,直到您知道需要更改它们
也就是说,您可以声明所有变量,final直到您知道需要更改它为止,此时您可以删除final.一个常见的未知事实是这对方法参数也有效:
public void foo(final int arg) { /* Stuff Here */ }
Run Code Online (Sandbox Code Playgroud)
- 当发生不好的事情时,留下一丝证据
当你遇到异常时,你可以做很多事情:显然,记录它并执行一些清理会有一些.但是你也可以留下一些证据(比如将变量设置为"UNABLE TO LOAD FILE"等哨兵值,或者99999在调试器中有用,以防你碰巧超过异常catch块).
- 谈到一致性:魔鬼在细节中
与您正在使用的其他库一致.例如,在Java中,如果要创建一个提取一系列值的方法,则使下限包含且上限为exclusive.这将使其与String.substring(start, end)以相同方式操作的方法一致.您将在Sun JDK中找到所有这些类型的方法,因为它使各种操作包括元素的迭代与数组一致,其中索引从零(包括)到数组的长度(独占).
那么你最喜欢的防守做法是什么?
更新:如果您还没有,请随意加入.在选择正式答案之前,我有机会获得更多回复.