如果必须选择 最喜欢的(聪明的)技术进行防御性编码,那么它们是什么?虽然我目前使用的语言是 Java 和 Objective-C (有 C + + 背景) ,但是可以用任何语言回答问题。这里强调的是 聪明的防守技术,而不是我们这里70% 以上的人已经知道的那些。所以现在是时候深入挖掘你的小把戏了。
换句话说,试着想想 没意思以外的例子:
下面是一些 很有意思最佳防御性编程实践的例子(特定于语言的例子在 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,你会发现所有这些类型的方法都是这样运行的,因为它执行各种操作,包括迭代与数组一致的元素,其中索引从0(包容性)到数组长度(独家新闻)。
那么你最喜欢的防御方法是什么呢?
更新: 如果你还没有,欢迎随时加入。在我选择 正式的答案之前,我给了更多的回答机会。