防御コーディングにお気に入りの(賢い)テクニックを選択する必要がある場合、それらはどのようなものでしょうか?私の現在の言語はJavaおよびObjective-C(背景はC ++)ですが、どの言語でもお気軽に回答してください。ここでの重点は、70%以上の私たちがすでに知っている以外の巧妙な防御技術にあります。さあ、今こそあなたのトリックの袋を深く掘り下げる時です。
つまり、この面白くない例以外を考えてみてください。
if(5 == x)
の代わりにif(x == 5)
:意図しない割り当てを回避する
ここにいくつかの興味深い興味深い防御的プログラミングの例があります(言語固有の例はJavaにあります):
-変数を変更する必要があることがわかるまで、変数をロックします。
つまり、変数を変更する必要があることがわかるまで、すべての変数を宣言final
できますfinal
。その時点で、を削除できます。一般的に知られていない事実の1つは、これがメソッドparamsにも有効であることです。
public void foo(final int arg) { /* Stuff Here */ }
-何か悪いことが起こった場合、証拠の痕跡を残してください
例外がある場合にできることはたくさんあります。明らかにそれをログに記録し、いくつかのクリーンアップを実行することは少数です。しかし、証拠の痕跡を残すこともできます(たとえば、「UNABLE TO LOAD FILE」や99999などの変数をセンチネル値に設定すると、例外catch
ブロックを突破した場合にデバッガーで役立ちます)。
-一貫性に関しては、悪魔は細部にあります
使用している他のライブラリと同じようにしてください。たとえば、Javaで、値の範囲を抽出するメソッドを作成している場合は、下限を包含し、上限を排他にします。これはString.substring(start, end)
、同じように動作するようなメソッドとの一貫性を保ちます。それはインデックスはゼロ(からされている配列と一致要素の反復など、さまざまな操作になりように、このように動作するには、Sun JDKのメソッドのこれらのタイプのすべてを見つけることができます包括的な配列(の長さ)、排他的に)。
それで、あなたの好きな防御行動は何ですか?
更新:まだ行っていない場合は、遠慮なくお知らせください。公式回答を選択する前に、さらに多くの回答が寄せられる可能性があります。