3

プログラムのスタイルについて質問があります。クラス内では、変数をメソッドに渡すか、メソッド内のフィールドにアクセスする方がよいでしょうか。

public class NumberTest{
   private int num;

   public NumberTest (int num){
      this.num = num;      
      calculateX(num);
      calculateY();
   }

   private void calculateX(int num){
      System.out.println (num);
   }

   private void calculateY(){
      System.out.println(num)
   }           
}
4

4 に答える 4

1

thisとにかくメンバー関数を呼び出すときは、すでにオブジェクトを(として)渡しています。。以外の値で同じ関数を使用できる必要がない限り、引数を明示的に指定しなくても何も得られませんthis.num

短いバージョン:必要がない限り、後者を使用してくださいcalculateX(some_whole_other_number)

于 2013-03-11T22:49:55.433 に答える
1

これらのメソッドは、同じ結果が得られるため、少し似ているように見えるかもしれませんが、実際には互いに非常に異なります。

たとえば、NumberTextメソッドが次のようになっているとします。

public NumberTest (int num){
   this.num = num;


   calculateX(num * 2);
   calculateY();
}

calculateX実際にはフィールドを取得しませんが、まったく異なるものを取得する可能性があります。

一般的な経験則は

numに渡す以外のものを渡すことが理にかなっている場合は、calculateXおそらく渡す必要があります。それ以外の場合は、渡さないでください。

また、これを行う場合

private void calculateX(int num){
   System.out.println (num);
}

パラメータ名を以外に変更してくださいnum

于 2013-03-11T22:50:08.833 に答える
1

ここで他の人と差をつけます...

それがまったく合理的である場合、私は引数を渡すのが好きです。これにより、メソッドがクラス実装からわずかに分離され、単体テストが容易になります。たとえば、this.num他の制約により、94404 に設定するのは非常に複雑なプロセスになる場合があります。

たとえば、これは郵便番号ですが、ビジネス ロジックでは、都道府県および国フィールドと一致する必要があります。または、実際には、このフィールドはデータベース、Web サイトなどから読み取られます...

引数を渡すと、単体テストをショートカットして値を渡すことができます。また、万が一、クラス フィールドにあるものを使用したくないという将来の特別なケースが発生する可能性がある場合は、それを行うことができます。

27 個のクラス フィールドを使用している場合、明らかに 27 個の引数を渡したくありません。しかし、IMO、それが 1 または 2 の場合、私はそれらを渡すのが好きです。

承認後に追加されたマイナー ノート:

引数を渡すこととフィールドを使用することの間には、別の違いが考えられます。マルチスレッド環境では、フィールドから読み取るよりも、渡された引数を使用する方が安全な場合があります。フィールドは関数の途中で変更される可能性がありますが、渡された引数は、型と使用法によっては変更される可能性が低くなります。この例では、渡された a がint num予期せず変更されることはありませんが、変更される可能性がthis.numあります。

于 2013-03-11T23:00:31.630 に答える
0

num は NumberTest の状態ですか? 後で必要になりますか?その場合は、フィールドにします。

NumberTest は、多くの数値に対して関数 calculateX を提供するだけですか? その場合は、calculateX を静的にします。

于 2013-03-11T22:53:21.923 に答える