Sollten private Helfer in Java über oder unter öffentliche Methoden gehen? [geschlossen]


24

Mir ist aufgefallen, dass ein Mitarbeiter und ich in Bezug auf die Reihenfolge der Methoden in unseren Java-Klassen unterschiedliche Vorgehensweisen haben. Einer von uns beginnt eine Klasse mit den wichtigsten öffentlichen Methoden und stellt anschließend alle privaten Helfer. Der andere von uns stellt sicher, dass die öffentlichen Methoden ganz am Ende stehen.

Dies ist eindeutig nur ein Stilproblem und es gibt keine richtige Antwort. Bevor wir uns jedoch dazu entschließen, dass es sich nur um einen weiteren Kampf zwischen Yooks und Zooks handelt, und den einen oder anderen willkürlich auswählen, habe ich mich gefragt, ob es vielleicht eine Empfehlung für einen Standard-Java-Styleguide oder einen praktischen Grund gibt, warum ein Ansatz besser ist als der andere.


13
Es spielt keine Rolle. Eine Münze werfen. Wähle eins. Bleib dabei.

Mögliches Duplikat der Platzierung
Kilian Foth

@KilianFoth - Diese Frage wurde 3 Monate zuvor gestellt und hat mehr Antworten. Würde das nicht die fragliche Frage zu einem Duplikat dieser Frage machen?
Brandon Yarbrough

Antworten:


25

Normalerweise wird es bevorzugt, aber Sie sollten auf jeden Fall versuchen, einen gemeinsamen Standard in Ihrem Unternehmen einzuhalten. Also, was auch immer Sie sich entscheiden, wählen Sie einen Standard und übernehmen Sie ihn universell.

Wenn Sie den in Clean Code enthaltenen Vorschlägen folgen , können Sie die Datei wie in einem Zeitungsartikel von oben nach unten lesen, was natürlich nahe legt, dass Hilfsmethoden nach den Methoden angezeigt werden, die sie sind Portion. Dies würde zu einer maximalen Lesbarkeit der Codestruktur führen. Also, wenn du es hättest

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

Ihre Datei würde wie folgt aufgebaut sein

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

Ein weiterer Nebeneffekt davon ist, dass Sie feststellen, dass Ihre Helfer ihre eigenen Helfer haben, und dass Sie herausfinden können, welche andere Klasse in Ihrer Datei tatsächlich vorhanden ist, und dass Sie eine Umstrukturierung vornehmen können, um sie in ihre eigene Klasse zu extrahieren, da diese Methoden vorhanden sind bereits in der Reihenfolge zusammengefasst. Aber das ist ein sekundärer Vorteil.


Ich bin froh, dass du das gesagt hast, sonst hätte ich es getan. Ich habe Bob Martin selbst gefragt, wie er bestellt, wenn zwei Methoden jeweils eine dritte Methode verwenden. In diesem Fall setzt er den 3. unter die anderen beiden.
Daniel Kaplan

1
Ihr Beispiel zeigt es nicht, aber dies führt dazu, dass öffentliche Methoden unter die privaten Methoden gemischt werden. Ich benutze diese Technik, aber dann fühle ich mich oft hin und her gerissen und möchte alle öffentlichen Methoden nach oben bringen, weil es auch viel zu sagen gibt, um die öffentliche Oberfläche leicht zu lesen.
Sean

@ Sean, na ja, ich würde normalerweise versuchen, entweder die öffentliche API meiner Klasse einzuschränken oder sie gegebenenfalls als Fassade zu belassen, aber dann die Implementierungshelfer an die Mitarbeiter weiterzugeben. Testen, refaktorieren, extrahieren, wiederholen. Aber es hängt natürlich davon ab, wie weit Sie gehen möchten. Ich bevorzuge meine Klassen klein.
Anthony Pegram

11

Öffentliche Methoden sind die Schnittstelle der Klasse. Jemand, der an der Verwendung Ihrer Klasse interessiert ist, kümmert sich nur um die Schnittstelle. Aus Sicht eines Klassenbenutzers wäre es nützlich, zuerst die öffentlichen Methoden zu haben, um das Scrollen zu reduzieren.


5

In C und C ++ werden Hilfsmethoden häufig an die erste Stelle gestellt, da Sie dann keine Deklaration benötigen. Viele Menschen haben diese Gewohnheit auf andere Sprachen übertragen, wo es keine Rolle spielt.

Ich bevorzuge die öffentlichen Methoden, da ich normalerweise beim Öffnen einer Datei nach der öffentlichen Schnittstelle suche. Ich möchte nicht über alle Implementierungsdetails hinweg scrollen müssen. Es ist auch der beliebteste Stil, den ich je gesehen habe.


2

Ich mag es, wenn die Reihenfolge der Methoden in einer Klasse auf Lesbarkeit und Kontext basiert, nicht auf Sichtbarkeit.

dh eine 'open'-Methode gehört wahrscheinlich vor ein' close '. Wenn zwei öffentliche Methoden 'a' und 'b' ein privates 'c' aufrufen und sie die einzigen sind, die es aufrufen - dann möchte ich, dass 'c' neben ihnen steht.

Ich denke nicht, dass eine Konvention der Methodenreihenfolge basierend auf Sichtbarkeit eine gute Sache ist.


1

Ich bevorzuge es, meine Klassen zu besuchen, in denen die Mitglieder in der Reihenfolge ihrer Wichtigkeit / Sichtbarkeit aufgelistet sind (hier meine ich mit Wichtigkeit, die direkten Einfluss auf die öffentliche Schnittstelle haben).

So neigen private Funktionen dazu, heruntergedrückt zu werden.

Es gibt Ausnahmen, in denen ich ähnliche Funktionen auch zusammenfasse, so dass es immer noch möglich ist, kleine private Funktionen zu finden, die mit den öffentlichen Funktionen vermischt sind.

Dies ist, wie Sie sagten, Geschmackssache.

Wenn ich jedoch an Code arbeite, der nicht von mir stammt, werde ich versuchen, die im Projekt verwendeten Konventionen zu befolgen.

Eine gute Möglichkeit, dies im Auge zu behalten, besteht darin, (vorausgesetzt, Sie arbeiten mit Eclipse) eine Code-Formatierungskonfiguration zu erstellen, diese mit der Projektquelle zu exportieren und der Quellcodeverwaltung zuzuweisen. Auf diese Weise ist die neueste und beste Codekonvention für das Projekt nur ein paar Klicks entfernt. Wenn Sie ein CTRL-SHIFT-F-Kommando erstellen, werden viele Argumente vermieden.

Ein zusätzlicher Vorteil der Verwendung automatischer Formatierer besteht darin, dass Sie die gewünschten Aktionen ausführen und den Code vor dem Festschreiben formatieren können. YMMV je nach Konvention und Formatierungswerkzeug.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.