お気に入りの(賢い)防御プログラミングのベストプラクティス [closed] 質問する

お気に入りの(賢い)防御プログラミングのベストプラクティス [closed] 質問する

もしあなたがお気に入り防御コーディングのための(賢い)テクニックとは何でしょうか?現在使用している言語はJavaとObjective-C(C++のバックグラウンドあり)ですが、どの言語でも構いません。ここでの重点は頭がいいすでに 70% 以上の人が知っている防御テクニック以外のテクニック。さあ、自分のテクニックの宝庫を深く掘り下げてみましょう。

言い換えれば、これ以外のことを考えてみてください面白くない例:

  • if(5 == x) の代わりに if(x == 5): 意図しない割り当てを避けるため

ここにいくつかの例を挙げます興味深い防御的プログラミングのベストプラクティス (言語固有の例は Java です):

- 変更する必要があることがわかるまで変数をロックダウンする

つまり、次のように宣言できる。全て変更する必要があることがわかるまで変数を使用しfinal、変更する必要があることがわかった時点で を削除できますfinal。よく知られていない事実の 1 つは、これがメソッド パラメータにも有効であるということです。

public void foo(final int arg) { /* Stuff Here */ }

- 何か悪いことが起こったら、証拠を残しましょう

例外が発生した場合に実行できる操作はいくつかあります。例外をログに記録してクリーンアップを実行するのが当然ですが、証拠の痕跡を残すこともできます (たとえば、例外ブロックを通り過ぎてしまった場合に備えて、変数を「UNABLE TO LOAD FILE」や 99999 などのセンチネル値に設定すると、デバッガーで役立ちますcatch)。

- 一貫性に関しては、細部にこそ悪魔が潜んでいる

使用している他のライブラリと一貫性を保つようにしてください。たとえば、Javaで値の範囲を抽出するメソッドを作成する場合は、下限を包括的そして上限エクスクルーシブString.substring(start, end)これにより、同じように動作する などのメソッドと一貫性が保たれます。Sun JDK では、インデックスがゼロ (包括的) を配列の長さ (エクスクルーシブ)。

それで、あなたのお気に入りの守備の練習は何ですか?

更新:まだ参加していない方は、ぜひ参加してください。私が選ぶ前に、より多くの回答を募集しています。正式答え。

ベストアンサー1

C++ では、フェンスポスト エラーをキャッチするための追加メモリを提供するように new を再定義するのが好きでした。

現在、私は防御的なプログラミングを避け、テスト駆動開発外部から素早くエラーをキャッチできれば、防御策でコードを混乱させる必要はなく、コードはドライ-er を使用すると、防御しなければならないエラーが少なくなります。

WikiKnowledgeが書いたように:

防御的なプログラミングを避け、代わりに早く失敗しましょう。

防御的プログラミングとは、データの何らかの障害を補おうとするコードを記述する習慣、つまり、呼び出し元が呼び出し元とサブルーチン間の契約に準拠しないデータを提供する可能性があり、サブルーチンが何らかの方法でそれに対処しなければならないと想定してコードを記述する習慣を意味します。

おすすめ記事