[解決済み] お気に入りの(賢い)防御的プログラミングのベストプラクティス【非公開
質問
もし、あなたが自分のことを選ぶとしたら <強い お気に入り (防御的なコーディングのための(賢い)テクニック、それは何でしょう? 現在の使用言語はJavaとObjective-C(C++のバックグラウンドあり)ですが、どの言語でも自由に回答してください。 ここで強調したいのは 賢い 7割以上の人が知っている防御法以外のテクニック では、次はあなたのトリックのバッグを深く掘り下げる番です。
つまり、これ以外を考えてみてください。 つまらん の例です。
-
if(5 == x)
ではなくif(x == 5)
: 意図しない代入を避けるため
以下は、いくつかの例です。 魅力的な 防御的なプログラミングのベストプラクティスです(言語固有の例はJava)。
- 変数を変更する必要があるとわかるまで、変数をロックすること
つまり
すべて
変数
final
を変更する必要があることがわかるまで、その時点で
final
. よく知られていないこととして、これはメソッドのパラメータにも有効です。
public void foo(final int arg) { /* Stuff Here */ }
- 悪いことが起きたら、証拠を残しておくこと
例外が発生したときにできることはたくさんあります。もちろん、例外をログに記録したり、何らかのクリーンアップを行ったりすることもできます。 例えば、変数を "UNABLE TO LOAD FILE" や 99999 のようなセンチネル値に設定すると、デバッガで例外を回避する際に便利です。
catch
-ブロック)。
- 一貫性に関して言えば、悪魔は細部に宿る
使用している他のライブラリと同様に一貫性を持たせること。 例えば、Javaで、値の範囲を抽出するメソッドを作る場合、下限値を
インクルーシブ
と上限
排他的
. これにより、以下のようなメソッドとの整合性が保たれます。
String.substring(start, end)
も同じように動作します。 Sun JDK のこの種のメソッドはすべてこのように動作します。要素の反復を含むさまざまな操作を配列と一致させるためで、インデックスがゼロから始まる (
包括的
)から配列の長さ(
排他的
).
では、あなたが好きな守備の練習方法を教えてください。
更新:まだの方は、ご自由にご意見をお寄せください。 を選ぶ前に、もっと多くの回答が来るようにチャンスを与えています。 オフィシャル の答えです。
どのように解決するのですか?
c++で、私はかつて、フェンスポストエラーをキャッチするための余分なメモリを提供するように、newを再定義するのが好きだった。
現在、私は防御的なプログラミングを避けて、次のようなものを好んで使っています。 テスト駆動開発 . エラーを素早く外部でキャッチすれば、防御的な作戦でコードを濁す必要はなく、あなたのコードは DRY -そして、その結果、防御しなければならないエラーが少なくなる。
<ブロッククオート防御的なプログラミングを避け、代わりにFail Fastを行う。
防御的なプログラミングとは というコードを書く習慣のことです。 を補おうとする。 データの不具合、コードの書き方 呼び出し側が に適合しないデータを提供する。 呼び出し元と呼び出し先の間の契約 サブルーチン は、何らかの方法でそれに対処しなければなりません。
関連
-
[解決済み] グリーンフィールド・アプリケーションとブラウンフィールド・アプリケーションとは?
-
[解決済み] Mac OS X で DYLD_LIBRARY_PATH を使ってもいいのでしょうか?また、それを使った動的ライブラリ検索アルゴリズムはどうなっていますか?
-
[解決済み] ハッシュコードとチェックサム、その違いは?
-
[解決済み] 好きな「プログラマー」アニメは?
-
[解決済み] 式と文の比較
-
[解決済み] セッションとは何ですか?どのように機能するのですか?
-
[解決済み】マジックナンバーとは何ですか、なぜ悪いのですか?[クローズド]
-
[解決済み】並行プログラミングと並列プログラミングの違いは何ですか?
-
[解決済み】パスコンポーネントの命名基準とは?
-
[解決済み】ビット演算子の実際の使用例【クローズド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] O(N log N)の複雑さ - 線形に似ている?
-
[解決済み] グリーンフィールド・アプリケーションとブラウンフィールド・アプリケーションとは?
-
[解決済み] ディープコピーとシャローコピーの違いは何ですか?
-
[解決済み] セッションとは何ですか?どのように機能するのですか?
-
[解決済み】ビット演算子の実際の使用例【クローズド
-
[解決済み】'foo'の本当の意味は?[クローズド]
-
[解決済み] プログラミングにおける "Context "という言葉?[クローズド]
-
[解決済み】10行以下の簡単なコードでできる最もクールなことは何ですか?初心者を鼓舞するのに役立つ [終了しました]
-
[解決済み] ボクシングとアンボクシング、そのトレードオフとは?
-
[解決済み] 例外やエラーコードの規約 [終了しました]。