0

最近、特定のエンティティに ID を割り当てる規則に気付きました。私の注意を引いたのは、ID が存在しない場合に -1 が返されることでした。0 ではなく -1 を返すのはなぜですか?

protected long AcqAgreementID
{            
    get
    {
        if(ViewState["AcqAgreementID"] != null)
        {
            return Convert.ToInt64(ViewState["AcqAgreementID"]);
        }
        else
        {
            return -1;
        }
    }
}

4

7 に答える 7

6

-1 が選択されたのは、その値が ID に使用できないためだと思います。その場合、ID が無効であることを通知するために使用できます。

この関数の設計者は、戻り値が特別なセンチネル値 -1 であるかどうかを呼び出し側がチェックすることを意図していたようです。-1 が返された場合、呼び出し元は適切な手順を実行する必要があります。たとえば、発信者はエラー メッセージを表示またはログに記録する場合があります。

于 2013-02-27T13:21:39.883 に答える
1

多くの場合、0は有効なIDまたは戻り値です。インデックスを持っているか、文字列を検索しているコントロールを考えてみてください。複数の項目を保持するコントロールの選択されたインデックスを検索する場合、または文字列内の特定の文字のインデックスを検索する場合、戻り値0は完全に正常です。インデックス0は、最初に選択された項目、または文字列の最初の位置に文字が見つかったことを意味します。どちらの場合も、何も選択または検出されていない場合は-1が返されます。

于 2013-02-27T13:25:50.383 に答える
1

これは、フレームワークでインデックスを返すメソッドの標準です.NET

public int FindIndex( Predicate<T> match )メソッドは、見つかった場合、match によって定義された条件に一致する要素の最初の出現のゼロから始まるインデックスを返します。それ以外の場合は –1。

( http://msdn.microsoft.com/en-us/library/x1xzf2ca.aspx )

これは、呼び出し元が、ID/インデックスが見つからないことを処理できるようにするためです。例外をスローしたり、別のソースから ID を取得したりすることがあります。彼らが望むものは何でも。

代わりにNull 許容型を使用することもできましたが、これらのメソッドの標準は、null 許容型が導入される前に開発されました。このコードを制御できる場合は、コードを変更することを検討できますが、-1 を返すことに問題はありません。多くの場合、0 は有効な ID/インデックスであるため、絶対に 0 を返さないでください。

于 2013-02-27T13:39:55.197 に答える
0

ほとんどの場合、どちらも返さないでください。ほとんどの場合、例外をスローする必要があります。

0または-1を返すことは、呼び出し側プログラムが単に例外をキャッチするのではなく、この既知の不正な値をチェックする必要があることを意味します。

于 2013-02-27T13:22:38.163 に答える
0

これは、マジックナンバーのアンチパターンの単純なケースです。

それは行われるべきではありません。定数または定義(言語によって異なります)を使用する必要があります。

一般的なマジックナンバー。あなたと同じようにWTFと質問を引き起こします。

于 2013-02-27T13:22:43.043 に答える
0

質問は少し自由形式で、どういうわけか一般的すぎます。「状況次第」のような答えは本当に簡単です。一般に、0が完全に正当なドメイン値である場合(たとえば、IDの許容範囲内にある場合)は負の値を使用します。

ただし、これを使用するのは適切なパターンではありません。関数/ APIのユーザーを混乱させてしまいます(あなたのように)。関数が1つのドメイン(正の整数)の数値を返し、負の値は不可能であるため、「評価された」値として使用されることを理解する必要があります。

たとえば、C#/。NETでは、Nullable型を検討する必要があります。彼らは、余分な「値/状態」(null)を追加することにより、「この値はドメインにありません」と明示的に言います。null許容型に加えて、考慮すべきその他の有効な規則は次のとおりです。

  • 例外をスローします(Int.Parseのように)
  • 有効性を示すパラメータを追加しoutます(Int.TryParseなど)
于 2013-02-27T13:22:53.510 に答える
0

IDにnull許容でない整数値を使用したい場所でこのパターンを使用しました。0は整数型のデフォルト値であるため、「デフォルト」/「未割り当て」IDとして使用するのは好きではありませんでした。これにより、モデルオブジェクトを調べて、挿入するか更新するかを判断できます。また、不明な「0」かどうかもわかります。

それはあなたのアーキテクチャに依存し、他のいくつかの投稿からわかるように、null許容IDと非null許容IDをめぐって宗教戦争を構築する可能性があります。

..。

注として、null許容型を必要とする関数/データモデルを呼び出す前に、モデルに-1などの既知の値でcollesed(??)されたnull許容型があるパターンも見たり使用したりしました。私たちが常に開発プロジェクトに取り組むのは、「依存する」という素晴らしい世界です。

于 2013-02-27T13:25:34.623 に答える