2

ソナーでこの警告を違反として受け取りました。ソナーからこの警告を削除するための適切な解決策が必要です。

私のコードは次のようなものです:

void method(){
try {
  int x;
  x=5;
 }
 catch{
    //handling code
 }
}

このコードに対して次のような警告が表示されました。

'5' is a magic number.

だから、私はそのような警告を取り除くための適切な解決策が欲しいです。

4

3 に答える 3

6

マジックナンバーは、コード内の番号を直接使用したものです(つまり、コード内でハードコードされた番号は、5を直接使用します)。

警告を取り除くには、これを試してください:

 int x;
 static final int SOME_NUMBER=5;
 x=SOME_NUMBER;
于 2013-01-18T12:44:29.570 に答える
6

ソナーは、名前を付けて、その特定の番号を使用する理由を文書化するように求めています。これを行うには、定数(表現力豊かな名前)を宣言します。

static final int NUMBER_OF_RETRIES = 5;

次に、「魔法の」数の代わりにその定数を使用して、その割り当ての意図をより明確に表現します。

x = NUMBER_OF_RETRIES;

これには、NUMBER_OF_RETRIESを変更する必要がある場合に、その「マジック」番号が使用されている場所ではなく、1か所で変更できるという利点もあります。

于 2013-01-18T12:50:08.470 に答える
3

さて、私はこの質問がすでに十分に答えられていることを知っていますが、それは非常に精巧であるため、ここに独自のソナーの説明を追加したいと思います:

マジックナンバーとは、どこからともなく出てくる数字であり、ステートメントで直接使用されます。魔法数は、たとえば、ループの反復回数を制限したり、プロパティの値をテストしたりするためによく使用されます。

マジックナンバーの使用は、コードを書いているときには明白でわかりやすいように見えるかもしれませんが、デバッグ時にはそれほど明白ではなく簡単です。

そのため、マジックナンバーは、使用する前に明確に名前が付けられた変数に最初に割り当てて、わかりやすく説明する必要があります。

-1、0、および1はマジックナンバーとは見なされません。

非準拠のコード例

public static void doSomething() {
  for(int i = 0; i < 4; i++){                 // Noncompliant, 4 is a magic number
      ...
  }
}

準拠ソリューション

public static final int NUMBER_OF_CYCLES = 4;
public static void doSomething() {
  for(int i = 0; i < NUMBER_OF_CYCLES ; i++){
    ...
  }
}

例外

このルールはhashCodeメソッドを無視します。

于 2018-02-09T15:28:17.967 に答える