web-dev-qa-db-ja.com

ゲッターとセッターを定義する順序は?

ゲッターとセッターを定義する順序のベストプラクティスはありますか? 2つのプラクティスがあるようです。

  • ゲッター/セッターのペア
  • 最初にゲッター、次にセッター(またはその逆)

ここでの違いを明らかにするためにJavaゲッター/セッターペアの例:

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public int getVar2() {
    return var2;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

そして、Java最初のゲッター、次にセッターの例:

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public int getVar2() {
    return var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

後者のタイプの順序付けはコードとクラス図の両方でより明確であると思いますが、それが他のタイプの順序付けを除外するのに十分であるかどうかはわかりません。

14
N.N.

最初の方法。可能な場合は常にグループ化するか、同じメンバーを操作する関連する関数を使用してグループ化します。

この方法でコードを配置すると、リファクタリングがより明確かつ簡単になります。これは、あるクラスが別のクラスから要因を取りすぎて多すぎる場合、因数分解可能な部分は通常、特定のメンバー変数を中心に展開します。

一般に、オブジェクト/変数のライフサイクル全体を同じページですべて見ることができると、コードのデバッグ、理解、操作が簡単になります。主に、スコープやアルファベット順などの表面的なものに基づくコードレイアウトは、実際にはリファクタリングの機会を見逃してしまうため、見逃してしまうと言っていました。

8
Benedict

チームに所属している場合は、彼らが通常行うことを実行します。それ以外の場合は、もっと好きなものを選んでください。重要なデザインの選択のスケールでは、これはおそらく「スペースバーを押すためにどの親指を使用する必要がありますか?」

25
axblount

言語によっても異なります。 Javaにはどちらの順序にも利点はありませんが、たとえばC#では、ゲッターとセッターをグループ化する「プロパティ」の概念があるため、その順序付けを強制します。C++のような言語では、ゲッターとセッター(たとえば、プライベートセッター、パブリックゲッター)で異なる可視性が必要になる場合があります。可視性修飾子は、複数のメソッドに対して個別にではなく一度だけ与えられるため、おそらく逆になります各。

6
Darrel Hoffman

私の知る限り、単一の規則はありません。 Oracle Javaファイルの編成に関するコード規約のセクション は、ゲッターとセッターの配置について明示的に言及していませんが、次のように述べています。

これらのメソッドは、スコープやアクセシビリティではなく、機能ごとにグループ化する必要があります。

これはガイダンスを提供しません-私はどちらの配置もこの基準を満たしていると主張できます。

考慮すべき点の1つは、最新のIDEでは、テキストコードコンポーネントとしてよりも、ファイルの構造について抽象的なビューを使用できることです。これと強力な検索ツールを組み合わせることで、ファイルのナビゲートが容易になり、大きなファイルでも適切なメソッドを見つけることができます。

例として、Eclipseにはアウトラインビューが用意されており、メソッドとフィールドをさまざまな方法で並べ替えたりフィルターしたりできるほか、ファイル内の場所に直接移動できます。 NetBeansにも同様の機能があり、他のほとんどのIDEにも同様の機能があると思います。

これが問題になるのは、IDEの外部でコードを読んでいる場合だけです。例として、外部コードレビューツールの使用や、バージョン管理システムからのデルタの表示があります。

最善の解決策は、プロジェクト内のファイル間で一貫性を保つことです。標準を見つけ、それを文書化し、それに固執します。

5
Thomas Owens

1つのフィールドのゲッターとセッターをペアでグループ化します。

すべてのゲッターとすべてのセッターをグループ化すると、ゲッターのみまたはセッターのみを持つフィールドを区別するのが難しくなります。

コードを読んでいるときや特定の機能を探しているときは、クラスにフィールドがあり、各フィールドにゲッターとセッターがあります。クラスがゲッターグループとセッターグループを持ち、それぞれにフィールドがあることは、私には意味がありません。

1
M. Dudley

これまでJava IDEは、ゲッターとセッターを生成できます。その機能を使用し、IDEが作成したようなメソッドの順序をそのままにします。これは生成されたコードです。不必要に触れないでください。

0
user281377