0

これはかなり言語に依存しないと思いますが、間違っている場合は C# (または C または C++) を使用してください。

「単純な」魔法の値とは、次のようなことを意味します。

if (Value > 0)

また

while (Value < 0)

また

while (MyQueue > 0)

これ(上記の疑似コード)を書いているときに、実際には0と比較されるものにのみ適用されることにちょっと驚かされました。

とにかく、これらの種類の魔法の値を処理する最良の方法は何ですか (読みやすさ、作成するキーストローク/コードの量と名前を考慮して)?

これ専用の (静的) クラス全体 (または C# では列挙型) を持つことは、非常にやり過ぎのように感じます。

4

2 に答える 2

1

特定の数字は、その文脈によってのみ「マジック ナンバー」と見なされます。一部の使用法は、数値の特定の値とは関係のない単純な概念を具体化しています。たとえば、リストが空でないかどうかを確認する場合は、次のいずれかのステートメントを記述できます。

if (list.Count != 0)

if (list.Count > 0)

if (list.Count >= 1)

どちら01「何もない」と「何か」を超える意味を持たないため、上記の 3 つのステートメントは「何もない」、「何もない以上」、「少なくとも何か」と読む必要があるため、それらの使用法を呼びません。 「マジックナンバー」。数値をまったく使用せずにこのようなチェックを実行する方法は他にもあるかもしれません。たとえば、C# ではAnyLINQ 演算子を使用できます。

if (list.Any())

これはより説明的で、ストーリーのようなコードの可読性を可能にします。他の言語には、「何もない」、「何か」、「空の集合」、「空でない集合」などの概念を表現するための他の機能がある場合があります。

于 2011-10-16T19:52:35.997 に答える
1

Allon Guralnek が述べたように、Any()拡張メソッドを使用して、特定のコレクションにアイテムが含まれているかどうかを確認することもできます。次のような追加の拡張メソッドを書くこともできます

public static class MyExtensions {
  public static bool IsNegative(this int number) {
    return number < 0;
  }

  public static bool IsPositive(this int number) {
    return number > 0;
  }
}

そして、ループまたは条件を次のように記述します

if (Value.IsPositive())
while (Value.IsNegative())
while (MyQueue.IsPositive())

Value と MyQueue が type であると仮定しintます。

于 2011-10-16T20:30:38.897 に答える