2010-03-04 2 views
71

Java-Klassen sind in der Regel in logische "Blöcke" unterteilt. Gibt es eine Konvention, um diese Abschnitte zu markieren? Idealerweise würde es von den großen IDEs unterstützt werden.Wie markiert man logische Codeabschnitte in Java-Kommentaren?

Ich persönlich benutze diese Methode:

//// Section name here //// 

jedoch einige Redakteure scheinen Probleme damit zu haben.

Als Beispiel in Code Objective-C Sie diese Methode verwenden können: Was

alt text

+3

als iOS-Entwickler, das habe ich am meisten vermisst, als ich mit Android Studio begann –

+1

downvoted: Mit modernen IDEs und Sprachen ist es eine schlechte Praxis. Wenn Sie Ihren Code partitionieren müssen, brechen Sie wahrscheinlich bereits das Prinzip der einfachen Verantwortlichkeit und es ist besser, sich in verschiedene Klassen/Dateien aufzuteilen. Wenn es mehrere Editoren gibt, wird es wahrscheinlich nach einiger Zeit nicht mehr synchron sein, da einige folgen werden, einige werden den Code umgestalten und neu organisieren, oder automatische Speicher- und Formatierungsaktionen werden es brechen. –

+0

downvoted: Ich stimme mit @ f.carlsen überein. Wenn Sie Ihre Klasse mit Kommentaren strukturieren, ist es sehr wahrscheinlich, dass Sie das [Prinzip der einfachen Verantwortung] (https://en.wikipedia.org/wiki/Single_responsibility_principle) brechen. – Schrieveslaach

Antwort

53

Ich persönlich benutze 80-chars Zeilenseparatoren, wie folgt aus:

public class Client { 

    //================================================================================ 
    // Properties 
    //================================================================================ 

    private String name; 
    private boolean checked; 

    //================================================================================ 
    // Constructors 
    //================================================================================ 

    public Client() { 
    } 

    public Client(String name, boolean checked) { 
     this.name = name; 
     this.checked = checked; 
    } 

    //================================================================================ 
    // Accessors 
    //================================================================================ 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public boolean isChecked() { 
     return checked; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 

} 

Natürlich ist dies ein bisschen übertrieben für so ein kleines POJO erscheinen, aber glauben Sie mir, es erwies sich in einigen großen Projekten sehr nützlich Dort musste ich durch große Quelldateien blättern und schnell die Methoden finden, an denen ich interessiert war. Es hilft auch, die Struktur des Quellcodes zu verstehen.

In Eclipse habe ich eine Reihe von benutzerdefinierten Vorlagen erstellt (Java -> Editor -> Templates im Eclipse-Dialogfeld "Preferences"), die diese Balken erzeugen, z. - sepa (Separator für Accessoren) - sepp (Separator für Immobilien) - SEPC (Separator für Konstrukteurs) - usw.

ich den Standard auch "neue Klasse" Vorlage (Java geändert -> Code-Style -> Code-Vorlagen im Eclipse-Einstellungsbildschirm)

Außerdem gibt es ein altes Eclipse-Plugin namens Coffee-bytes, das die Art und Weise verbessert, wie Eclipse Teile des Codes faltet. Ich weiß nicht, ob es noch funktioniert, aber ich erinnerte mich daran, dass man willkürliche faltbare Zonen definieren konnte, indem man spezielle Kommentare wie // [SECTION] oder etwas hinzufügte. Es könnte immer noch in den letzten Eclipse-Revisionen funktionieren, also schaut es euch an.

4

:

#pragma mark - 
#pragma mark Section name here 

Dies führt zu einem Menü in XCode, die wie folgt aussieht Wie ich weiß, gibt es keine unterstützte Spezifikation zum Gruppieren von Klassenmitgliedern. Sie können die Art von Kommentaren verwenden, die Sie mögen, aber die Wahrscheinlichkeit ist groß, dass sie von keinem Tool unterstützt wird.

Es ist besser, verwandte Elemente durch Vererbung oder Aggregation in separate Klassen zu gruppieren. Dies ist ein guter OOP-Stil

+4

Das Teilen von Codeabschnitten scheint nur theoretisch möglich zu sein. Nehmen Sie zum Beispiel eine Klasse Client mit Attributen wie Name und einer Sammlung "Rechnungen". Ich würde gerne in der Lage sein, dies in einen Abschnitt "Name" zu teilen, der Getter/Setter für den Namen und einen Abschnitt "Rechnungen" enthält, die Add/Remove-Methoden für Rechnungen enthalten. Es scheint unpraktisch, diese in eine Klassenhierarchie aufzuteilen, die nur ein Attribut pro Klasse hinzufügen kann, d. H. "NamedEntity", "NameAndAddressEntity", "Invoicable", ... – Frederik

6

Ich mochte das auch, wenn ich mit xcode. Für Eclipse benutze ich ctrl + o (quick outline), um durch eine Java-Klasse zu navigieren.

6

Die Verwendung unnötiger Kommentare/Markierungen im Code, um die Arbeit zu erleichtern, ist möglicherweise keine gute Übung. Ich habe wenig Ahnung von xcode und Java-Entwicklung, aber alle wichtigen IDE-Unterstützung die Mitglieder ohne besondere Markierungen wie Eclipse zu finden zeigt die Methoden und Mitglieder mit Gliederung, die ausgelöst werden kann mit ctrl+O, Intellij (die ich bevorzuge mehr auf Mac und hatte auch eine Community Edition) hat das gleiche Konzept und kann mit (Strg + F12) schnell aufgerufen werden. Also mein Punkt hier ist, verwenden Sie keine unnötige Mark-up in den Code als alle (oder zumindest gut/gesund) IDEs können es automatisch tun.

+2

Stimmen zu, Abschnittsmarker fügen nur visuellen Durcheinander hinzu. Deine Klasse sollte genau konzentriert genug sein, um diese Dinge unerwähnt zu lassen. –

+14

Sicher, aber Methoden in logische und markierte Abschnitte gruppiert können dazu beitragen, visuelle Reihenfolge auf, was sonst eine flache Liste von Methoden wäre. Manchmal wissen Sie nicht genau, welche Methode Sie verwenden möchten, und es ist angenehm, die entsprechenden Methoden auf einmal zu verwenden und eine Vorstellung davon zu haben, dass Sie den vollen Umfang des zugehörigen Codes sehen. –

2

Eine moderne IDE ermöglicht es Ihnen, Ihren Code auf viele verschiedene Arten anzuzeigen und sogar zu reorganisieren. Mit Eclipse können Sie sogar die Definition des Codes anzeigen, auf dem Sie den Cursor in einem anderen Fenster haben.

Jede automatische Reorganisation Ihres Codes führt dazu, dass ein solches Markup nicht mehr funktioniert.

Wenn Sie gruppieren möchten, dann überlegen Sie, Dinge, die zusammengehören, in dieselbe Klasse zu legen und Dinge, die nicht zusammengehören, in verschiedenen Klassen.

14

Eclipse definiert eine @category javadoc annotation (blättern Sie zu Abschnitt "Category support"), der das Filtern nach Kategorie in der Gliederungsansicht ermöglicht. Nicht genau was du willst. Ich bin überrascht, dass niemand ein Eclipse-Plugin geschrieben hat, das eine Ansicht wie Ihren Screenshot bietet.

+0

In den meisten Java-Ansichten ist es jedoch möglich, Klassenmitglieder nach ihren Kategorien zu filtern, um beispielsweise als Standard-Getter und Setter auszublenden. – Riduidel

+0

keine Ahnung, warum ich @category in Android Studio nicht verwenden kann, weißt du, was kann ich tun, um dasselbe Verhalten zu erreichen? – MiguelHincapieC

0

Wenn Sie Ihre Methoden gruppieren können, führen Sie eine andere Klasse speziell für dieses Konzept aus, die Sie in einem Abschnitt erfassen möchten. Mach weiter, das Erstellen von Dateien ist kostenlos.

-12

Für IntelliJ wie ich:

 public void ________________INIT__________________() {}; 

ziemlich in Dateistruktur suchen!

+3

Das scheint eine sehr schlechte Lösung zu sein. Warum sollten Sie zusätzliche Methoden deklarieren, wenn Ihr Ziel die Code-Organisation ist? – Nate

+1

Damit wird die gesamte Datei in der Strukturansicht segmentiert. – P5ycH0

+1

dies ist nur eine, die wirklich in android studio suchen, schlagen sie eine eigene als antwort und ich werde verwenden – user170317

91

Für intellij/android Studio gibt es eine erstaunliche Lösung.
beginnen mit:
//region Description
und enden mit:
//endregion

Die Abkürzung für das im Menü ist, dass Sie mit Befehl + Alt + T (Mac) oder Ctrl öffnen können + Alt + T (Windows)

Sie können auch Ihre eigene Linie für zusätzliche visuelle Trennung hinzufügen, wenn Sie sie brauchen. Die Region kann wie jede Funktion beliebig mit den Tasten +/- kontrahiert und erweitert werden. Sie können auch mit Befehl + Alt + Zeitraum (Ctrl +Alt + Zeitraum)

Source zwischen den Regionen navigieren.

Beispiel:

//region Parceler Implementation 
//--------------------------------------------------------------------------------------- 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeParcelable(this.die, 0); 
    dest.writeParcelable(this.dieSprite, 0); 
} 

private DieVm(Parcel in) { 
    this.die = in.readParcelable(Die.class.getClassLoader()); 
    this.dieSprite = in.readParcelable(Sprite.class.getClassLoader()); 
} 

public static final Parcelable.Creator<DieVm> CREATOR = new Parcelable.Creator<DieVm>() { 
    public DieVm createFromParcel(Parcel source) { 
     return new DieVm(source); 
    } 

    public DieVm[] newArray(int size) { 
     return new DieVm[size]; 
    } 
}; 
//--------------------------------------------------------------------------------------- 
//endregion 
+0

Das ist unglaublich nützlich Danke Andrey. BTW Ich benutze Eclipse Keyboard Shortcut Layout und ich glaube nicht, dass die Shortcuts funktioniert für mich aber die '// Region' funktioniert super – ThinkBonobo

+2

Ich sehe keine Möglichkeit für diese in der Strukturansicht angezeigt werden, so bin ich immer noch mit falschen leeren Mitgliedern (zusammen mit ungenutzter Warnung unterdrücken). – Tom

+1

gibt es eine Möglichkeit, diese Region in Android Studio (Strukturansicht) anzuzeigen? – MiguelHincapieC

0

Neben Andrey Antwort zur Verfügung gestellt, verwenden // Region // endregion, legen wir [BigAscii Buchstaben] [1] in dem großen Codeabschnitten. Wenn es schnell scrollt, sticht es wirklich hervor. Ein Nachteil dieses Ansatzes besteht darin, dass ich nicht danach suchen kann, so dass Sie einen Suchbegriff direkt unterhalb des "Banners" hinzufügen müssen, wie ich es unten tue.

Blockquote

// _  _____   _____     _ _ 
// | | | __ \ /\ | __ \  /\  | | | | 
// | | | | | |/\ | |__) | /\ _ _| |_| |__ 
// | | | | | |/ /\ \ | ___/ //\ \| | | | __| '_ \ 
// | |____| |__|/____ \| |  /____ \ |_| | |_| | | | 
// |______|_____/_/ \_\_|  /_/ \_\__,_|\__|_| |_| 
// 
// Search here with: LDAP Auth 

[1]: http://patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP Auth

0

würde ich javadoc; oder verwenden Sie die folgende als einfache „Separator“ (einzeln oder 3 Zeilen):

/** RecyclerOnItemClickListener */ 

/** 
* RecyclerOnItemClickListener 
*/ 

so dass im IDE scheint es, in einer anderen Farbe als die anderen unauffälligen kommentierte grau.

Verwandte Themen