Javaでは、プライベートヘルパーはパブリックメソッドの上または下に移動する必要がありますか?[閉まっている]


24

同僚と私は、Javaクラスでのメソッドの順序に関して反対のプラクティスを持っていることに気付きました。私たちの1人は、主要なパブリックメソッドでクラスを開始し、その後、プライベートヘルパーをすべて配置します。もう一方は、パブリックメソッドが最後にあることを確認します。

明らかに、これは単なるスタイルの問題であり、正しい答えはありません。しかし、この問題が単にYooks対Zooksの戦いであり、どちらか一方を勝手に選ぶだけであると判断する前に、おそらく標準Javaスタイルガイドの推奨事項があるのか​​、あるアプローチが他のアプローチより優れている実用的な理由があるのではないかと思っていました。


13
関係ありません。コインを裏返します。一つを選ぶ。それにこだわります。


@KilianFoth-この質問は3か月前に質問され、さらに回答があります。それは問題の質問をこの質問の複製にしないでしょうか?
ブランドンヤーブロ14

回答:


25

それは通常好みに帰着しますが、あなたは確かにあなたの組織内の共通の標準に従うことを試みるべきです。だから、あなたが決めたものは何でも、標準を選び、それを普遍的に採用する。

どちらを選択するかについては、Clean Codeで提供されている提案に従う場合、新聞記事のようにファイルを上から下に読むことができます。これは、ヘルパーメソッドがメソッドのに表示されることを自然に示唆します助けます。これにより、コード構造が最大限読みやすくなります。あなたが持っていた場合

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

ファイルは次のように構成されます

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

これの別の副作用は、ヘルパーが独自のヘルパーを持っていることを発見することであり、それはあなたが実際に持っているものがファイル内に住んでいる別のクラスであるかを知るのに役立ち、それらのメソッドはすでに順番にグループ化されています。しかし、それは二次的な利点です。


あなたがこれを言ってくれてうれしかったです。2つのメソッドがそれぞれ3番目のメソッドを使用する場合、どのように注文するかをBob Martin自身に尋ねました。その場合、彼は3番目を他の2つの下に置きます。
ダニエルカプラン

1
あなたの例はそれを示していませんが、これはプライベートメソッドの中に混在するパブリックメソッドにつながります。私はこの手法を使用しますが、多くの場合、私は破れていると感じ、すべてのパブリックメソッドをトップに押し上げたいと思っています。
ショーン

@Sean、私は通常、クラスのパブリックAPIを制限するか、必要に応じてファサードとして残しますが、実装ヘルパーを協力者に押し込みます。テスト、リファクタリング、抽出、繰り返し。しかし、それはもちろんあなたがどこまで行きたいかに依存します。クラスは小さいほうが好きです。
アンソニーペグラム

11

パブリックメソッドは、クラスのインターフェイスです。クラスの使用に興味がある人は、インターフェースのみを気にします。クラスユーザーの観点からは、最初にパブリックメソッドを使用してスクロールを減らすと便利です。


5

CおよびC ++では、宣言が必要ないため、ヘルパーメソッドが最初に配置されることがよくあります。多くの人がその習慣を他の言語に持ち越し、それは問題ではありません。

通常、ファイルを開くとき、そのパブリックインターフェイスを探しているので、私は一番上のパブリックメソッドを好みます。実装の詳細をすべてスクロールする必要はありません。それはたまたま私が見た中で最も人気のあるスタイルなので、コンベンションのために言われることがあります。


2

クラス内のメソッドの順序は、可視性ではなく読みやすさとコンテキストに基づいているのが好きです。

つまり、おそらく「open」メソッドは「close」の前に属します。2つのパブリックメソッド「a」と「b」がプライベート「c」を呼び出し、それらがそれを呼び出す唯一のものである場合、「c」がそれらの隣にあるのが好きです。

可視性に基づくメソッドの順序付けの規則は良いことだとは思いません。


1

私は、メンバーが重要度/可視性の順にリストされているクラスを選ぶことを好む傾向があります(ここで重要度とは、パブリックインターフェイスに直接影響することを意味します)。

したがって、プライベート関数はプッシュダウンされる傾向があります。

これには例外がありますが、私は同様の機能をグループ化する傾向があるため、公共のものと混在する小さなプライベート機能を見つけることも可能です。

あなたが言ったように、これは好みの問題です。

しかし、私のものではないコードで作業するときは、プロジェクトで使用されているすべての規則に従ってください。

これを追跡する良い方法の1つは、(ここではEclipseで作業していると仮定して)コードフォーマット構成を作成し、プロジェクトソースと共にエクスポートし、ソース管理にコミットすることです。そうすれば、プロジェクトの最新かつ最高のコード規約は、わずか数回クリックするだけでセットアップでき、コミットする前にCTRL-SHIFT-Fの習慣を付けることで、多くの議論を防ぐことができます。

自動フォーマッタを使用することの追加されたボーナスは、あなたが幸せになるような慣習で何かをすることができ、コミットする前にコードをフォーマットするだけです。YMMVは、前述の規則およびフォーマットツールに依存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.