如果您必须选择最喜欢的(聪明的)技术进行防御性编码,它们将是什么?尽管我当前使用的语言是Java和Objective-C(具有C ++背景),但是可以使用任何语言进行回答。除了我们这里70%以上的人已经知道的防御技术外,这里还将重点介绍巧妙的防御技术。因此,现在该深入了解您的绝招了。
换句话说,除了这个无趣的示例,请尝试思考其他问题:
if(5 == x)
代替if(x == 5)
:避免意外分配
以下是一些有趣的最佳防御性编程实践的示例(特定于语言的示例在Java中):
-锁定变量,直到您知道需要更改它们为止
也就是说,您可以声明所有变量,final
直到知道需要进行更改为止,此时可以删除final
。一个普遍未知的事实是,这对于方法参数也有效:
public void foo(final int arg) { /* Stuff Here */ }
-发生不良情况时,请留下大量证据
发生异常时,您可以执行许多操作:显然,将其记录下来并执行一些清理工作只是其中的一部分。但是您也可以留下一些证据(例如,在调试器中将变量设置为“ UNABLE TO LOAD FILE”或99999等哨兵值将很有用,以防您碰巧遇到异常catch
-block)。
-关于一致性:细节决定成败
与您正在使用的其他库保持一致。例如,在Java中,如果要创建一种提取一系列值的方法,则将下限包括在内,将上限值排除在外。这将使其与String.substring(start, end)
以相同方式运行的方法保持一致。在Sun JDK中,您会发现所有这些类型的方法都具有这种行为,因为它会进行各种操作,包括与数组一致的元素迭代,其中索引的范围是从零(包括)到数组的长度(不包括)。
那么,您最喜欢的防御方法是什么?
更新:如果您还没有的话,请随时鸣叫。在选择正式答案之前,我有机会获得更多回应。