問題タブ [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.

0 投票する
2 に答える
1099 参照

c++ - 派生クラスが独自の関数を呼び出さないようにすることはできますか?(C ++)

次の基本クラスについて考えてみます。これは、CallDerivedFunctionを呼び出した回数をカウントします。

私以外の人は、DerivedFunctionを実装する派生クラスを作成します。ただし、DerivedFunctionが呼び出される回数をカウントしようとしています。

派生クラスDがDerivedFunctionの独自の実装を直接呼び出すのを防ぐ方法はありますか?禁止:

注:もちろん、これは単純化したものです。より一般的な質問は、基本クラスがマネージャーとして機能し、派生クラスのコレクションの使用パターンの追跡などを行うことになっている場合、派生クラスにマネージャークラスを介して呼び出すように強制できますか?それとも、ここで正しいことをするために派生クラスの開発者に頼らなければなりませんか?

0 投票する
7 に答える
251 参照

c# - 名前の変更のみを行う派生「シェル」クラスを宣言するにはどうすればよいですか?

コードで渡したり使用したりする 2 種類の文字列があります。この 2 つは密接に関連していますが、混同しないでください。メソッド シグネチャ (および一般的には型の非互換性) が 2 つの異なる種類の文字列のセマンティックな意味を強制するように、単なる文字列であるが名前が異なる 2 つのクラスを使用することで、エラーを回避できると考えました。同時に、何百もの場所をリファクタリングsomething = "foo";する必要はありませんでした。something.Value = "foo";

最初の考え:

もし私が持っているなら

で呼び出しようとするとMyMethod(secondKindVar, firstKindVar);、コンパイラ エラーが発生します。

ぶつけた壁: string封印。

再考:KindOf<T>暗黙の変換演算子を使用して、値を取り込んで吐き出すだけのジェネリック クラスを作成します。このような:

このようにして、次のようなことができます:

私がぶつかった壁:KindOf<T>クラスから何も継承していないようです: 派生型にはコンストラクターも演算子も存在しません。つまり、基本的に派生クラスの基本クラス全体を再実装する必要があります。コードのコピー。うん。

だから私はここで基本的な何かが欠けているように感じます. 私がやろうとしていることについてのアイデアはありますか?

0 投票する
24 に答える
44063 参照

c++ - 単一行のifまたはループに中括弧(つまり{})を使用する目的は何ですか?

私はC++講師の講義ノートを読んでいて、彼は次のように書いています。

  1. インデントを使用する//OK
  2. 演算子の優先順位に依存しない-常に括弧を使用する//OK
  3. 常に{}ブロックを使用してください-単一の行であっても// OKではありません、なぜ???
  4. 比較の左側にあるConstオブジェクト//OK
  5. >=0の変数にはunsignedを使用する//いいトリック
  6. 削除後にポインタをNULLに設定-二重削除保護//悪くない

3番目のテクニックは私にはわかりません:1行をaに配置することで何が得られ{ ... }ますか?

たとえば、次の奇妙なコードを考えてみましょう。

次のように置き換えます。

最初のバージョンを使用する利点は何ですか?

0 投票する
2 に答える
128 参照

c++ - C++ の適切な形式

重複の可能性:
(bCondition == NULL) と (NULL==bCondition) の違いは何ですか?

この質問から、 「比較の左側の const オブジェクト」は、他の方法よりも「優れている」ことがわかります。どうしてこれなの?

0 投票する
2 に答える
524 参照

java - Javaマップからのエントリの*コピー*を追加するpropertyMap

propertyMapのコピーをpropertyMapに追加したいと思います。

上記のコードはそれを行いませんが、うまくいけば意図を伝えますか?

これを行うための最良の方法は何ですか?「クローン作成」、「防御コピー」、「不変オブジェクト」、Collections.unmodizable ...などについて読んだことがありますが、以前よりも混乱しています。

私が必要とするのは、典型的なSOスタイルで、私が意味することをコードスニペットに書くためのより良い方法です。

0 投票する
4 に答える
665 参照

asp.net - User.Identity.Nameはスローされますか?

User.Identity.Namenull参照例外をスローするのではなく、認証されたユーザーがいない場合に空の文字列を返すように見えることに気付きました。

User.Identity.Name決して投げないことを仮定することは有効ですか?または、アクセスする前にnullをチェックする必要がありIdentityます。

0 投票する
1 に答える
22913 参照

c++ - C++ は常に明示的なコンストラクターを使用します

次のブログを読んだ後:

http://xania.org/200711/ambiguous-overloading

私は、「コンストラクターを常に明示的に定義するべきではないのか?」と自問し始めました。

だから私はこの記事を見つけた以上に読み始めました:

http://www.sjbrown.co.uk/2004/05/01/always-use-explicit/

これは別の例を示し、その背後にある彼の考えも説明しています。もちろん、これはあるブロガーの考えです。

私はあなたの何人かから聞いてうれしいです, 方法についてのあなたの考え, この主題についてのあなたの経験は何ですか, そしてどちらの方法のいくつかの例もいいでしょう.

0 投票する
2 に答える
3099 参照

c# - XmlSerializer - 列挙型を逆シリアル化するときにデフォルトを設定するにはどうすればよいですか?

次のようなクラスがあります(大幅に簡略化されています):

外部ソースから XML ファイルを受信して​​います。彼らのドキュメントには、Foo 要素の Bar 属性には「ValueOne」または「ValueTwo」しかないと記載されています (XSD は提供されません)。

したがって、次のようにデシリアライズします。

...そしてそれはすべてうまくいきます。

しかし、昨夜、代わりに次のような XML が送られてきて逆シリアル化に失敗しました (当然のことですが)。<Foo Bar="" />

これを防御的にコーディングする良い方法はありますか? 理想的には、「ここで何か問題が発生した場合は、ValueOne をデフォルトに設定してください」のようなことを言いたいと思います。1 つの属性が破損したため、XML ファイル全体を破棄したくありません。

0 投票する
6 に答える
211 参照

java - 識別子名の数字に問題はありませんか?

C\C++\Java以来 -

int 2a ; //invalid suffix "a" on integer constant

有効な構文ですが、バリアント名の残りの数字に問題はありませんか?

お気に入り -

0 投票する
2 に答える
211 参照

objective-c - アクセサー メソッドでの Objective-C の防御的コピー

Java のバックグラウンドを持つ私は、Objective-C で防御的にプログラミングする方法を理解するのに苦労しています。SomeClassが変更可能でコピーメソッドを提供する
と仮定すると、これは Java で書く典型的なコードです。

私はそれを理解するのに少し時間がかかりました

customerList プロパティに割り当てる前に、setter の引数のコピーを作成します。私を混乱させるのは、適切なゲッターを書くことです。これまでのところ、次のようになります。

これは、self.customerList = ... のようなすべての内部メソッド呼び出しで機能しますが、セキュリティ違反を引き起こす外部呼び出しへの直接ポインターを渡します。コピーを返す別の public getter を提供することを検討していましたが、型にはまらない名前が必要になるため、これは避けたいと考えています。この状況をどのように対処しますか?
ありがとうございました。