Java-Namenskonvention mit Akronymen [geschlossen]

218

Wie lautet der korrekte Name für die folgende Java-Klasse: DVDPlayeroder DvdPlayer?

DD.
quelle
93
Ich hasse Akronyme. DigitalVersatileDiscPlayerist der Weg nach vorne.
Tom Hawtin - Tackline
7
+1 an Tom für den Witz. Ich finde diese Frage hilfreich, wenn "richtig" als "Standard" oder "am typischsten" neu interpretiert wird. Die akzeptierte Antwort ist großartig!
Jon Coombs
6
Für mich ist es sinnvoll, solche Akronyme als ein einziges Wort zu betrachten, und als solches folge ich der Konvention und verwende sie DvdPlayer.
Daniel
7
Der Styleguide hat Folgendes zu sagen: "Formatieren Sie eine Abkürzung als Wort, wenn sie Teil eines längeren Klassennamens ist." So DvdPlayerist der Weg zu gehen. (Und für Tom: "Verwenden Sie ganze Wörter und vermeiden Sie die Verwendung von Abkürzungen, es sei denn, die Abkürzung wird häufiger verwendet als die Langform." , Und ich denke, "DVD" wird häufiger verwendet als "Digital Versatile Disc" :-)
aioobe
Sie meinten sicherlich "Diskus", nicht wahr? :)
Ville Oikarinen

Antworten:

237

Da es so aussieht, als gäbe es in Java keinen einzigen Standard dafür, möchte ich darauf hinweisen, dass die .NET Framework-Entwurfsrichtlinien dies spezifizieren.

Bevor Sie mich dafür kritisieren, dass ich nicht zum Thema gehöre, denken Sie bitte daran, dass die Richtlinien für die Benennung von Klassen für Java und .NET Framework ziemlich ähnlich sind, was die .NET-Richtlinien als überzeugende Referenz nützlich macht.

Allgemeine Regeln

In beiden Richtlinien wird empfohlen, Akronyme nur zu verwenden, wenn das Akronym allgemein bekannt und bekannt ist. DVD oder XML sind hervorragende Beispiele dafür, da Sie sie zwar sofort erkennen, das Erkennen der erweiterten Version jedoch etwas länger dauern würde.

Abkürzungen

In den .NET Framework-Richtlinien wird empfohlen, keine Abkürzungen (im Gegensatz zu Akronymen) zu verwenden, außer dass zwei häufig verwendete Abkürzungen "ID" und "OK" in Bezeichnern verwendet werden können. Bei Verwendung einer Abkürzung Idwird immer eine gemischte Groß- und Kleinschreibung verwendet, mit Ausnahme des ersten Wortes einer camelCase-Kennung (im Gegensatz zu einer PascalCase-Kennung).

In Java wird diese Konvention nur teilweise befolgt. Werfen Sie einen Blick darauf , wie die Schreibweisen gemischt getIDund getIdsind in der JCL. (Scrollen Sie teilweise auf dieser Seite nach unten). In der Version Java 8 allerdings getIdmehr und mehr verwendet, die Hinweise die Pascalkonvention heute bevorzugt. Es ist am besten, Abkürzungen möglichst vollständig zu vermeiden.

Kurze Akronyme

Die .NET Framework-Richtlinien besagen, dass zwei Buchstabenakronyme wie "IO" für beide Buchstaben den gleichen Fall haben sollten. Für PascalCase-Bezeichner (wie einen Klassennamen) würden Sie also erhalten DBRate, während Sie für einen camelCase-Bezeichner (wie eine lokale Variable) möglicherweise haben ioChannel.

Dies scheint definitiv auch in Java die vorherrschende Konvention zu sein.

Lange Akronyme

In den .NET Framework-Richtlinien wird empfohlen, dass Akronyme mit drei oder mehr Buchstaben für PascalCase- und camelCase-Bezeichner eine Groß- und Kleinschreibung verwenden, mit Ausnahme des ersten Wortes eines camelCase-Bezeichners. Für einen Klassennamen, den Sie möglicherweise haben XmlDocument, kann eine lokale Variable benannt werden httpRequest.

Diese Konvention wird in Java nicht immer befolgt. Akronyme mit vier Zeichen scheinen normalerweise gemischte Groß- und Kleinschreibung zu verwenden, aber selbst die JCL stimmt nicht mit Akronymen mit drei Buchstaben überein. Die meisten von ihnen scheinen Großbuchstaben zu sein, wie "URL", "XML", "SQL" und "DOM", aber es gibt einige Ausnahmen wie "Jar".

Fazit

Für Java:

Verwenden Sie für Akronyme mit mehr als 4 Buchstaben die Groß- und Kleinschreibung. Die Standardbibliothek macht das und es macht einfach Sinn.

Für 3-Buchstaben-Akronyme können Sie alle Großbuchstaben wie die JCL verwenden, oder Sie können gemischte Groß- und Kleinschreibung verwenden, wie dies bei .NET Framework der Fall ist. Sei auf jeden Fall konsequent.

Verwenden Sie für Akronyme mit 2 Buchstaben alle Großbuchstaben.

Für Abkürzungen mit 2 Buchstaben hat Java nicht wirklich einen Standard, aber ich schlage vor, gemischte Groß- und Kleinschreibung zu verwenden, es sei denn, die Konsistenz mit anderen Namen würde dazu führen, dass alle Großbuchstaben besser aussehen.

Kevin Cathcart
quelle
11
gut gesagt, schöne Mühe!
Eliran Malka
1
Ich mag das, außer dass es nicht konsistent ist, CAPS für Akronyme mit 3 und 2 Buchstaben zu haben. (Vielleicht bin ich zu puristisch, aber ich sehe die akzeptierte Antwort aus praktischen Gründen. Außerdem gibt es den Verwirrungsfaktor.)
Jon Coombs
1
@JCoombs: Nun, die Inkonsistenz für 2 Buchstaben betrifft so etwas, IpAddressdas für viele Menschen schrecklich aussieht. Persönlich, wenn ich Java-Code schreiben muss, gehe ich mit gemischten Groß- und Kleinschreibung für die 3-Buchstaben-Akronyme und lasse nur die beiden Buchstaben als Sonderfall.
Kevin Cathcart
5
Was ist, wenn Ihr Klassenname mehrere benachbarte Akronyme aus zwei Buchstaben enthält? Unabhängig davon, was Sie tun, wird es "falsch" aussehen - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin
3
Wirklich gute Antwort. Aber ich persönlich mag die Idee der .NET-Richtlinien nicht, je nach Länge der Akronyme und ob es sich um eine Abkürzung handelt, unterschiedliche Namen zu vergeben. Wer kümmert sich eigentlich um die Länge eines Akronyms und überprüft diese? Oder wenn es eine Abkürzung ist? Ich bevorzuge eine pauschale Regel für die Benennung. Das Problem tritt auf, wenn Bibliotheken von Drittanbietern mit anderen Konventionen als den von Ihnen gewählten Regeln verwendet werden.
Amani Kilumanga
98

Es gibt keine "richtige" Antwort. Nur eine Reihe von Praktiken und Konventionen, die besser mit Ihren anderen Tools spielen.

Deshalb bevorzuge ich DvdPlayer. Es ist hilfreich , wie in Eclipse können Sie tun , Ctrl+ Shift+ Tund durch den ersten Buchstaben jedes Wortes Klassen wählen.

Alt-Text

Flybywire
quelle
19
oooo das ist ein nützlicher Eclipse-Tipp. Vielen Dank!
Peter Perháč
1
(+1) ein guter Tipp. das beantwortet die Frage für mich :-)
Asaf
2
Nur "SIO" reicht aus, um diese Klasse zu finden.
Finnw
7
Dies funktioniert auch an anderer Stelle in Eclipse - beispielsweise automatisch vervollständigen. Haben Sie eine Methode / Variable namens 'myDvdCoverImage'? - Geben Sie einfach mDCI Ctrl + Space
teabot
3
Es sind auch einige Verknüpfungen bereits festgelegt, z. B. sysout Strg + Leertaste, mit dem Sie System.out.println erhalten. Gleiches gilt für (versuchen) und (für)
Medopal
50

Ich habe gesehen, dass beide in freier Wildbahn verwendet wurden, und Sun scheint sich für den DVDPlayerStil zu entscheiden. Ich bevorzuge es DvdPlayerjedoch, weil auf diese Weise klar ist, wo die Wortgrenzen liegen, auch wenn es mehrere aufeinanderfolgende Akronyme gibt, wie in HTTPURLConnection.

JaakkoK
quelle
3
Es ist auch schneller, auf diese Weise zu tippen.
Ates Goral
6
Ich denke, "DVDPlayer" macht die Wortgrenzen klarer. "Dvd" ist kein Wort, während "DVD" ein Akronym für die Wörter "Digital Versatile Disc" ist. Die tatsächlichen Wortgrenzen in "DVD Player" liegen also bei "D", "V", "D" und "P".
Greg Brown
18
@ GregBrown: Eine DVD ist eine CD mit einem Loch. Niemand außer Ihnen kennt den vollständigen Namen und kümmert sich auch nicht darum. Und es ist weitaus praktischer, DvdPlayer zu verwenden.
Igor Rodriguez
4
@GregBrown: Tatsächlich ist es zumindest in Eclipse praktischer, wo die Erkennung von Kamelfällen ein Schmerz mit Akronymen ist: dh mit DvdPlayer können Sie "DP" eingeben und Strg + 1 drücken, um die Auswahl von DvdPlayer zu treffen, aber wenn Wenn Sie einen DVDPlayer hätten, müssten Sie "DVDP" eingeben. Und ist noch ärgerlicher, wenn es länger ist. Ich möchte keinen UNESCOConnector in meinem Code haben. Auf jeden Fall ist es eine Frage der Wahl.
Igor Rodriguez
21
Ein weiteres gutes Beispiel ist HTTPSID - meinte ich HTTP SID oder HTTPS ID ... Daher sollte HttpSid bzw. HttpsId geschrieben werden, um die Bedeutung besser zu erklären.
Oz Edri
37

Ich möchte einzelne Instanzen von Klassen folgendermaßen definieren:

Catalogue catalogue;
Person person;

DVDPlayerWie würde ich eine Instanz davon nennen , wenn ich sie verwenden würde? dVDPlayer? Daher würde ich den DvdPlayerKlassennamen wählen , damit Sie die Instanzen wie folgt benennen können dvdPlayer.

Peter Perháč
quelle
16
Was ist los mit DVDPlayer dvdPlayer;?
Azz
9
@DerFlatulator Was ist daran nicht falsch? Egal wie du gekommen bist dvdPlayer, wenn du zurückgehst, wirst du bekommen DvdPlayer.
Maaartinus
5
@DerFlatulator: Es ist eine Frage der Automatisierung beim Konvertieren von UpperCamelCase in LowerCamelCase: Ich hatte das Problem beim Automatisieren der Hibernate-Zuordnung zu einem snake_case: DvdPlayer -> dvd_playeraber DVDPlayer -> d_v_d_player. Es gibt keine Möglichkeit, DVDPlayer auf dvd_player zu automatisieren.
pdem
3
@DerFlatulator: Okay, danke für die Antwort, es hat in diesem Fall funktioniert. Aber ich bin immer noch überzeugt von der "DvdPlayer" -Notation: Was ist mit DVDRPGPlayer? Sie sollte in dvdRpgPlayer konvertiert werden, nicht in dvdrpgPlayer.
pdem
2
Berücksichtigen Sie auch Ihre Getter und Setter: Funktioniert getDvdPlayer()besser als getDVDPlayer()beispielsweise bei Verwendung mit JSP EL (z foo.dvdPlayer. B. ). Und wenn Sie Ihre Getter mit Kleinbuchstaben in den Akronymen benennen, ist es am besten, Ihre Klassennamen aus Gründen der Konsistenz und Vorhersagbarkeit gleich zu halten.
Daiscog
33

Einige Beispiele aus den JavaSE-Klassen, Apache Commons und Spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Also - es ist nicht wirklich wichtig.

Bozho
quelle
3
Einverstanden. Seien Sie einfach konsistent in Ihrer Codebasis.
JARC
2
Ich würde nicht sagen, dass es keine Rolle spielt, obwohl dies nicht gerade eine große Sache ist. Einige Benutzer finden allgemein bevorzugte Standards sehr hilfreich, auch wenn nicht alle anderen konsequent sind, sie zu befolgen.
Jon Coombs
sollte ich lieber SRSals SoftwareRequirementSpecification?
Shantaram Tupe
24

Effektives Java scheint DvdPlayer zu bevorzugen.

Brian Harris
quelle
10

Wie andere bereits angedeutet haben, ist es ein Stil, der sich von Projekt zu Projekt unterscheidet. Google-Projekte wie Guava und GWT bevorzugen den DvdPlayerStil.

https://google.github.io/styleguide/javaguide.html#s5.3-camel-case

Steven Benitez
quelle
Ein allgemeinerer Link zur Google-Konvention für DvdPlayerStil: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel
1
Der Link in der Antwort wurde zu gwtproject.org/makinggwtbetter.html#codestyle verschoben. Der Link, den @StanKurdziel erwähnt, wurde zu google.github.io/styleguide/javaguide.html#s5.3-camel-case verschoben
Jeroen Wiert Pluimers
8

Von Sun Java Docs :

Klassennamen sollten Substantive sein, in gemischtem Fall, wobei der erste Buchstabe jedes internen Wortes groß geschrieben wird. Versuchen Sie, Ihre Klassennamen einfach und beschreibend zu halten. Verwenden Sie ganze Wörter, vermeiden Sie Akronyme und Abkürzungen (es sei denn, die Abkürzung wird viel häufiger verwendet als die Langform wie URL oder HTML).

Codaddict
quelle
14
Das sagt eigentlich nichts darüber aus, ob es sich um Groß- oder Kamel handelt.
DD.
@DD. Ich denke, "viel häufiger verwendete" Punkte, um All-Caps für relevante Akronyme (HTTP, GET usw.) zu verwenden, als für ein zufälliges geschäftsspezifisches Wort wie DVD, MRI, MAGA usw.
goelakash
3

DVDPlayerist der Standard, aber DvdPlayernicht ungewöhnlich.

Sie sehen meistens nicht getId. Das liegt wahrscheinlich daran, dass ID eine Abkürzung von "Identität" ist. Es sind eigentlich die Initialen des Ausweises.

HttpURLConnectionwird oft als Beispiel für eine gemischte Konvention angegeben. "Http", das als Protokollname in einer URL verwendet wird, sollte jedoch in Kleinbuchstaben geschrieben werden (obwohl Großbuchstaben häufig akzeptiert werden).

Tom Hawtin - Tackline
quelle
2
Ich denke nicht, dass dies wirklich ein Standard ist, aber es ist wahrscheinlich der häufigste.
b.roth
Es ist im Sun Java Coding Standard, IIRC. Obwohl nicht in der JLS.
Tom Hawtin - Tackline
7
HyperTextTransferProtocolUniformResourceLocatorConnection
Fly-By-Wire
2
Ich bin mir ziemlich sicher, dass die meisten Leute ID als Abkürzung für Identifier verwenden ... dh in einer Datenbank bezieht sich die Tabellen-ID auf die Tabellen-ID des Identitätsdokuments.
DD.
9
DVDPlayer ist definitiv nicht der Standard; Sogar das JDK ist in seiner Herangehensweise an dieses Thema äußerst inkonsistent.
Kevin Bourrillion
0

Es gibt hier keine "richtigen", nur Einstellungen.

Sun ist in der Art und Weise konsistent, wie sie Klassen benennen, die "URL" und "HTML" enthalten, aber ich sehe, dass HTTP in den Javadocs sowohl Großbuchstaben als auch Kamel-Groß- und Kleinschreibung verwendet.

Persönlich würde ich DvdPlayer bevorzugen.

Duffymo
quelle
Ich glaube, der Name des HTTP-Protokolls in URLs sollte in Kleinbuchstaben geschrieben werden (obwohl er von Browsern in Großbuchstaben akzeptiert werden kann).
Tom Hawtin - Tackline