問題タブ [defensive-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java防御コピー
私はこのようにコード化された防御的なコピーを見てきました
しかし、それは私には意味がありません。Javaで、そのオブジェクトのメモリに同一のコピーを作成する方法はありませんか?
すべての場合に機能するとは限らないことを読みましたclone()
が、その理由はわかりません。
php - MVCパラダイムがWebアプリケーションに最適なのはなぜですか?
私の教授が、なぜ私がWebアプリケーションにMVCを使用することを選んだのかと私に尋ねると確信しています。
正直なところ、私はMVCを初めて使用します。私はそれについて読みました、私はそれを使ってブログアプリケーションを構築しています、私はこの方法で問題に取り組むことは非常に論理的だと思います。
しかし、なぜ?O_O空白を描きます。N層アプリケーションを構築するというよりも、どのように適していますか?
c++ - C++ で fstream から意味のあるエラー メッセージを取得する
std::fstreams からポータブルな方法で意味のあるファイル アクセス エラー メッセージを取得する最良の方法は何ですか? badbits
andの原始性はfailbits
少し面倒です。以前、win32 と POSIX に対して独自の例外階層を作成したことがありますが、これは STL の方法よりもはるかに柔軟でした。
例外が有効になっているwhat
のダウンキャストされた catch ( std::exception
) のメソッドから、エラー メッセージとして「basic::ios_clear」が表示されます。fstream
これは私にはあまり意味がありませんが、問題が何であるかはわかっていますが、数か月後に展開を開始するときに私の人生が楽になるように、プログラムをもう少し有益なものにしたいと考えています。
Boost には、fstream
クロス プラットフォームおよびクロス STL 実装の実装から意味のあるメッセージを抽出するものはありますか?
erlang - フェイルファストスタイルのプログラムがディフェンシブスタイルのプログラムよりも短いのはなぜですか?
Erlangのような言語でのフェイルファストスタイルのプログラミングが、他のほとんどの言語で見られる防御スタイルよりもはるかに短いプログラムになる方法について読んだことがあります。これはすべてのタイプのプログラムに対して正しいですか、そしてこれの理由は何ですか?
javascript - 失敗を示すJavaScriptのサイレント技術
nullに依存する代わりに、JavaScriptでエラーを報告するための良い方法は何でしょうか。エラーが発生し、関数が先に進むことができない場合は未定義です。私は3つのアプローチを考えることができます:
- 何もしない
- 例外をスローする
- 主張する
簡単なシナリオ例を次に示します。渡された金額をユーザーアカウントにクレジットする関数です。この関数credit
はAccount
オブジェクトの一部です。
これが素朴な解決策です。
このアプローチの主な問題は、無効なデータです。それを修正し、戻り値を使用して操作が失敗したことを示しましょう。
これは前のものからの改善ですが、クライアントコードは、操作が成功したことを確認するために戻り値をチェックする必要があります。基本的にシステム内のすべてのメソッドに対してこれを行うと、面倒になる可能性があります。
2番目のアプローチと同様の3番目のアプローチは、例外をスローすることです。自分で例外をスローしているので、一般的な例外ではなく、特定のタイプの例外をスローする可能性があります。
例外のスローに似た4番目のアプローチは、コードでアサーションを使用することです。上記のアプローチと比較した場合の1つの欠点は、アサーションが汎用であるため、カスタム例外をスローする機能が失われることです。ただし、オブジェクトを渡して各assert呼び出しをスローすることにより、それは可能です。
グローバルassert
関数は記述が簡単で、コードが少し短くなります。
これらのアプローチのうち、予期しない値や不幸な道に対処するための良い方法は何でしょうか。ここで言及されていない、役立つ可能性のある他のアプローチはありますか?
authentication - アクセスを認証するときにキーロガーを回避する方法
タイトル通り、アクセスを認証するときにキー/キーストロークログを無効にするために何ができるでしょうか。
PIN /パスワードからランダムな数字を選択するためのアドバイスを求める関連する質問(ピンパスワードからランダムに数字を保存して確認する方法)を投稿しました。他にどのような合理的に目立たない方法があるでしょうか?
ありとあらゆる解決策に感謝します。
java - このコードを防御プログラミング用に最適化するには、他にどのような方法がありますか?
私のデータ構造プロジェクトの目標は、アーティスト、タイトル、歌詞が明確にマークされた10000を超える曲を含む提供されたファイルを読み込むことであり、各曲は1つの二重引用符で囲まれた行で区切られています。このコードを記述してテキストファイルを解析しました。実行時間は3秒弱で
、422K行のテキストを読み取り、
Songオブジェクトを作成してそのSong
をArrayListに追加します。
私が書いた解析コードは次のとおりです。
私はこのプロジェクトのコードについてアルゴリズム入門教授と話していましたが、彼は、他の人から提供されたデータの不整合を許容するために、コードをより防御的にするように努めるべきだと述べました。もともと私はArtist、Title、Lyricsフィールドの間にif / elseブロックを使用していましたが、彼の提案により、シーケンシャルifステートメントに変更しました。このコード例を使用して彼の主張を理解することはできますが、入力の不整合を許容することについて、どうすればより防御的になることができますか?
sql - 防御的なデータベース プログラミング - T-SQL を使用した堅牢なコード?
アプリケーション開発には、防御的プログラミングの概念があります。防御的なプログラミング手法を実装し、Transact-SQL を使用して堅牢なコードを記述する方法は?
perl - Perlでファイル内の行をループする最も防御的な方法は何ですか?
私は通常、次のコードを使用してファイル内の行をループします。
ただし、別の質問に答える際に、Evan Carrollは私の答えを編集し、私のwhile
ステートメントを次のように変更しました。
彼の理論的根拠は、次の行がある場合0
(最後の行である必要があり、そうでない場合はキャリッジリターンがあります)、while
私のステートメント($line
に設定され"0"
、からの戻り値)を使用すると、途中で終了するというものでした。したがって、割り当ては、"0"
falseと評価される割り当てにもなります)。定義性をチェックすれば、この問題に遭遇することはありません。それは完全に理にかなっています。
だからやってみました。最後の行に0
キャリッジリターンがないテキストファイルを作成しました。ループを実行しましたが、ループが途中で終了しませんでした。
それから私は、「ああ、多分価値は実際にはないかもしれない0
、多分そこに物事を台無しにしている何か他のものがあるかもしれない!」と思いました。だから私はDump()
から使用しました、Devel::Peek
そしてこれはそれが私に与えたものです:
明示的に設定したスカラーを"0"
呼び出すと同様の結果が得られるため、値は実際には文字列であることがわかります(唯一の違いはLENフィールドにあります-ファイルLENは80ですが、スカラーからのLENは8)です。Dump()
"0"
それで、取引は何ですか?キャリッジリターンがないwhile()
行だけをループに渡すと、ループが途中で終了しないのはなぜですか?"0"
Evanのループは実際にはより防御的ですか、それともPerlは内部で何かおかしなことをしますか?つまり、これらのことを心配する必要はなく、while()
実際にヒットしたときにのみ終了しますeof
か?
c# - ファイルの存在とディレクトリが空であることのチェックと信頼性に関する質問
ほとんどすべてのプログラミング言語には、ファイルまたはディレクトリの存在を確認する方法があることを知っています。
ただし、私の場合、プログラムの設定を格納するファイルが作成されます。存在しない場合 (つまり!File.Exists or Directory.Count == 0
、Directory がファイルの格納ディレクトリである場合)、いくつかの設定を入力するように求めるプロンプトが表示されます。
しかし、この種のコードは信頼できますか? たとえば、ディレクトリにファイルがない場合は詳細が要求されます。そうでない場合は、無関係な他の種類のファイルまたは正しい形式の改ざんされたファイルが存在する可能性があります。特定のファイル自体を確認したほうがよいでしょうか。ファイルを構成する変数もチェックした方が速いのでしょうか?
これを行うための最良の一般的な方法は何ですか? フォルダが存在する場合、ファイルを確認しますか? フォルダがそこにあり、空の場合? ファイルに書き込まれた文字列を確認しますか?
編集: 同僚からの考えでは、問題に近いため、変数レベルでチェックする必要があるというものでした (不適切な暗号化、破損、ロケールなどの問題を特定します)。
ありがとう