web-dev-qa-db-ja.com

警告「100」のあるCheckStyleはマジックナンバーです

私のコードでは、メッセージ「100」がマジックナンバーであるという警告が表示されます。以下のコードを参照してください。

int randomNo = generator.nextInt(100);

私はここでそれを読みました マジックナンバーとは何ですか、そしてなぜそれは悪いのですか? しかし、私はこれを単一の場所で使用しているので、静的で変数を作成することによって100を宣言することはより多くのスペースを占めるでしょう。これを解決する正しい方法は?

  public static final int HUNDRED= 100;

なにか提案を?

8
mohammed sameen

HUNDREDは本当にばかげていますが、なぜ100を選んだのですか?その意味は何ですか?

何かのようなもの:

public static final int RANDOM_UPPER_LIMIT=100;

または、値の使用目的に応じて、さらに有益な情報を提供します。

public static final int MAX_NUMBER_OF_COLORS=100;

より意味があり、読みやすさが向上します。

この場合、スペースの節約を考慮する必要はありません。変数を宣言する場合のスペースのオーバーヘッドは、そのような場合は完全に無視できます。

16
yurib

それは実際にはストレージとは関係ありません、それは読みやすさです。いくつかの番号を変更したい場合は、コードで見つけるのが難しい場合があります。それが一番上にある場合は、それが優れています(構成ファイル内にある場合は、多くの場合、さらに優れています)。

はい、それは良い解決策です。

そのファイルの外部でそれを必要としない場合は、それを「プライベート」にする必要があります。さらに読みやすくし、次のように実際の意味を示す名前を使用することをお勧めします。

MAX_RANDOM_NUMBER=100

それが何のために使われるかをもっとよく

MAX_RANDOM_FOR_CARD_SELECTION

またはそのようなもの。

このように、20枚の新しいカードを追加したために5か月後にそのファイルを調べてみると、コードを見なくても何を変更する必要があるかが完全に明らかです。

6
Bill K

ロバートマーチン(ボブおじさん)をチェックしてください

クリーンコード

徹底的な説明(またはコーディングスタイルに関するその他のガイド)のための本。基本的に、ハードコードされた「100」は、コードの読者にとって何の意味もありません。アプリを使い終わってから6か月経っても、何の意味もありません。コードに表示されるので(100件中99件)、ほとんどどこからともなくマジックナンバーです。なぜ99や101ではなく100なのですか?アプリが乱数の生成を100に制限し、上(または下)に制限しないのはなぜですか?

まとめると、それはあなた自身にとってあなたのコードの読みやすさの問題であり、あなたのコードの現在または将来の読者にとって、それはコーディングスタイルの問題です。

1
ttarczynski

最短のコードではなく、理解しやすく、保守しやすいコードを書くのは良いことです。この100を定数に保存すると、それが本当に100である理由を説明する適切な名前を追加できます。たとえば、ランダムスコアを生成する場合、可能な最大スコアが100の場合、次のように定義できます。

static final int MAX_SCORE = 100;

その後、他の場所でも使用できます。なぜそれが100で他に何もないのか誰もが理解するでしょう。そして、いつかそれをたとえば200に変更する必要がある場合は、コードを検索せずに1か所で置き換える必要があります。

また、プログラムの他の部分で、意味の異なる100が含まれる可能性もあります(たとえば、MAX_PERCENT)。 MAX_SCOREを200に変更したいが、MAX_PERCENTはそのままにしておく場合は、定数を個別に設定するとはるかに簡単になります。

1
Tagir Valeev