0

特定の属性を持つクラスがあるとします。このクラスには、パラメーターに基づいて何かを計算するプライベート メソッドがあります。例 (Java):

public class Foo {
    private Lorem c1;
    private Ipsun c2;
    //...
    private Justo c12;

    private Double selfExplanatoryMethodName(){
        //This method uses c1, c3 and c4
    }
}

メソッドのヘッダーを次のようにすることをお勧めします。
private Double selfExplanatoryMethodName(Lorem c1, Amet c3, Sit c4) {/*...*/}

このメソッドがハッシュ メソッドであると想像してください。ハッシュの生成に使用するパラメーターを知っておくと役立つ場合があります。

では、これは良い習慣だと思いますか?それはなぜですか?

4

5 に答える 5

1

パラメータ化するかしないかが問題です...

...オブジェクトの状態に依存せずに入力を受け取り、出力を返す関数の場合:したがって、パラメーターを受け取り、魔法を実行して値を返すメソッドが必要です...真の関数- -パラメータを使用する必要があります。あなたの方法はブラックボックスです。Javaはstaticそのようなメソッドのキーワードを提供し、パラメーターのみに依存するタスクには静的メソッドを使用する必要があります。これらのケースには、パラメーター化されたメソッドが必要です。例:

 public static String encodeString(String input, String format)

...オブジェクトの状態を処理し、値を返す関数の場合:メソッドのようにhashcode。引数を渡してはいけません...メソッドはインスタンスメソッドである必要があります...魔法を実行するためにインスタンスフィールドを使用する必要があります。これは例です:

 public String toString(){
    return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2
 }

...一部の外部入力が必要で、一部の状態属性も必要な場合:外部入力に基づいて状態オブジェクトを操作して結果を返すメソッドがある場合など。外部で必要なパラメータのみを渡します。例えば:

 public String toFormat(String format){
    if("json".equals(format)  //<-- this is external agent.
      return new JSONObject(this).toString();
    else
      return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2

 }

だから、それはあなたがしていることに依存しています。


編集1:(コメントへの回答)

に来ますWhy?

冗長性を最小限に抑えることです。これが、上記のポイントを経験則としてとらえるべき理由ですdo not create unnecessary objects; do not bloat the parameter list

どのシナリオでのグッドプラクティスは何かについて述べました。あなたは自分の状況に重みを付け、何を使うかを決めます。したがって、メソッドがある場合は、

int add(int a, int b){returns a+b;} 

aとbを渡し、このメソッドを静的なものとして使用することをお勧めします。しかし、どこでやっnew Additor(a, b).add();

public int add(){return this.a + this.b;} 

あまり良い考えではありません。

于 2012-08-09T06:50:26.803 に答える
0

私はQiauに同意しません。

私の経験では、フィールドに依存することで、よりクリーンなコードが作成され、煩雑さが減り、読みやすさが向上します。
クラスはホワイト ボックスであり、読み手は直感的に選択したフィールド名に基づいて、メソッドがそれらに対して何を行うかを推測できます。また、より高い(目に見える)結束を得るためにフィールドに寄りかかっています。

于 2012-08-09T06:41:44.337 に答える
0

使用する言語に依存する場合があります。しかし、私の経験では、はい、それは良い習慣です.

パラメータが含まれていると、読みやすく理解しやすくなります。さらに悪化させたい場合は、戻り値をスキップするか、さらに悪いことにグローバル変数のみを使用することもできます。

于 2012-08-08T10:33:47.823 に答える
0

メソッドが何をするかによって異なります。メソッドがオブジェクトに対して何かを行う場合、パラメーターが間違っていると思います。メソッドがオブジェクトに対して何かを行い、追加情報 (別のオブジェクトなど) が必要な場合、パラメーターは必須です。メソッドがオブジェクトに対して何もしない場合は、代わりに静的メソッドであるかどうかを確認する必要があります。

于 2012-08-09T06:37:59.073 に答える
0

私は完全に Java プログラマーとして話しているのですが、そのクラスのフィールドにアクセスするメソッドを持っている場合、メソッドにパラメーターを入れたり、そのようにフィールドを戻したりしたことはありません。代わりに、メソッドの先頭に (特に javadoc を使用して) コメントし、このメソッドがフィールドに対して正確に何を行うかを説明します。フィールドをリッピングして渡すことは、カプセル化の目的を無効にします。

少なくともオブジェクト指向プログラミングの場合、クラスが既にフィールドとして保持しているものを渡すことは、私にはまったく意味がありません。何かをクラスのフィールドにすることで、「ねえ、これはあなたにとって有益な情報だと思います。後で必要になるかもしれません」と言っています。その情報を実際に使用することはなく、常にその場で情報が供給されるのであれば、なぜそれを保持する必要があるのでしょうか?

結論: 変数が実際にはフィールドとして属しており、関数が何をするかがまだ十分に明確でない場合、パラメーターを追加してクラスのフィールドを戻すことは、コードを明確にする方法ではありません。どちらかといえば、コード自体がより混乱し、不必要に冗長になります。

于 2012-08-09T06:39:02.217 に答える