Soll die Variable ID oder ID heißen? [geschlossen]

126

Das ist ein bisschen umständlich, aber ich habe gesehen, wie manche Leute Idwie in:

private int userId;
public int getUserId();

und andere verwenden:

private int userID;
public int getUserID();

Ist einer von diesen ein besserer Name als der andere? Warum? Ich habe gesehen, dass dies in großen Projekten sehr inkonsistent gemacht wurde. Wenn ich einen Standard setzen würde, mit dem die meisten Leute vertraut wären? Welches ist der konventionelle Standard?

Adam
quelle
40
Konsistenz ist das Wichtigste. Sei es Kamelkasten oder Unterstriche oder so weiter. Seien Sie konsequent.
38
Sehen Sie sich die XML-APIs Ihrer Sprache an, um zu sehen, wie sie dies tun. Java benennt Klassen wie SAXParserund DOMException.NET benennt Klassen wie XmlDocument. Basierend darauf würde ich in Java "ID" und in C # "Id" sagen.
Luiscubal
1
Da in Java die Bezeichner in Großbuchstaben standardmäßig für statische Felder verwendet werden, ist der Name "ID" für das Basisfeld nicht der beste. Und da kommt die Konsistenz ...
Danubian Sailor
8
Würden Sie die Variablen EGOund benennen SuperEGO? Das habe ich nicht gedacht. ;)
Kojiro
4
Was?! Konsistenz? Wo ist der Wutkrieg ?! Das war's, ich ernenne mich hiermit zum Bewahrer der heiligen Kamelkasten-Syntaxflamme und beschließe hiermit, dass es für Noobs ist, dies mit Großbuchstaben für Akronyme zu tun. Es ist auch richtig zu wollen, dass das Toilettenpapier von oben rollt, es sei denn, Katzen langweilen sich und tun seltsame Dinge. In diesem Fall fällt es ihnen viel schwerer, das Toilettenpapier, das von unten rollt, zu entwirren, was eine solche Häresie akzeptabel macht Katzenbesitzer. Ich weiß nicht, warum ich darüber entscheiden darf. Bob, der Wächter der heiligen Flamme der Toilettenpapier-Richtung, ist wohl beschäftigt.
Erik Reppen

Antworten:

56

Die wichtigste Regel, die in diesen Fällen befolgt werden muss, ist die Konsistenz: Machen Sie es wie alle anderen.

Sehen Sie sich zum Beispiel die XML-APIs Ihrer Sprache an, um zu sehen, wie sie dies tun.

Java benennt Klassen wie SAXParser und DOMException , .NET benennt Klassen wie XmlDocument .

Basierend darauf würde ich in Java "ID" und in C # "Id" sagen.

Ich habe jedoch gesehen, dass Java EE 6 eine Anmerkung mit dem Namen @Id(siehe Dokumentation ) hat, sodass Java "Id" anscheinend nur als normales Wort ansieht .

Luiscubal
quelle
@Id zeigt auf einen Anmerkungsklassennamen, keinen Variablennamen. Falsches Beispiel.
Jwenting
3
SAXParser könnte SimpleAPIforXMLParser sein (und ist es glücklicherweise nicht) (oder sogar SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser). Jeder Großbuchstabe beginnt mit einem Wort. Also sollte es auch in Java "Id" sein
user470365
2
@jwenting Das Problem besteht darin, herauszufinden, ob "id" als ein Wort oder als zwei Wörter betrachtet wird. @Idsagt, dass es sich um ein einzelnes Wort handelt, der Variablenname wäre also "id".
Luiscubal
SAX ist ein Akronym, Id nicht.
Nalply
8
Sie haben Recht mit IdC # (und .NET im Allgemeinen), aber aus einem anderen Grund. Die Regel besteht darin, alle Buchstaben eines 2-Buchstaben-Akronyms (z. B. IPAddress) in Großbuchstaben zu schreiben und nur den ersten Buchstaben eines längeren Akronyms (wie im Beispiel von XmlDocumentIhnen angegeben) in Großbuchstaben zu schreiben . Aber Idund Oksind die Ausnahmen von dieser Regel, speziell erwähnt. Ausführliche Informationen finden Sie im Capitalization Rules for AcronymsAbschnitt des Capitalization ConventionsArtikels. Aber auch Microsoft bricht diese Regel (zB DbConnectiongegen DBNull)
Allon Guralnek
110

Beständigkeit ist König; wähle das eine oder andere aus, aber mache es konsequent überall.

Trotzdem bevorzuge ich die erste Variante, da sie nicht gegen camelCase verstößt (dies bedeutet, dass Sie sich zwei Stilregeln merken müssen, nicht nur eine).

Aus diesem Grund werden manchmal zwei Großbuchstaben verwendet , aber eine ID ist eigentlich nur eine Form der Identifikation.

Robert Harvey
quelle
18
Ich würde es nicht mögen, wenn ein Computerprogramm versucht, auf meine ID zuzugreifen.
Blrfl
1
userIdOfSender
Sean McSomething
19
@ SeanMcSomething: Ick. SenderUserId
Robert Harvey
5
Obwohl ich Ihnen zustimme, dass "ID" der bevorzugte Weg ist, um zu sehen, wo die Verwirrung eintritt: In alltäglichen Gesprächen sagen wir es tatsächlich so, als ob es ein Akronym wäre, wie in "Kann ich Ihren Ausweis sehen?".
500 - Interner
3
Schauen Sie sich andere Akronyme im Kamelkasten an. Es gibt SoapProtocol, nicht SOAPProtocol. ID ist die Abkürzung für Identitätsdokument, daher verstehe ich nicht, warum es im Kamelfall auf außergewöhnliche Weise behandelt werden sollte. Trotzdem würde ich es vorziehen, die Benutzer-ID konsistent zu verwenden als die Benutzer-ID und die Benutzer-ID, die in meinem Programm inkonsistent verwendet werden.
Neil
76

TL; DR: Im Zusammenhang mit .NET-Klassenbibliotheken empfiehlt Microsoft die Verwendung von ID. Dies ist leicht kontraintuitiv, da es sich um ein seltenes Beispiel für eine zulässige / empfohlene Abkürzung handelt (Abkürzungen werden im Allgemeinen verpönt).

Wenn es sich um C # - oder .NET-Klassenbibliothekskonventionen handelt, stehen Microsoft einige ziemlich genau definierte Benennungsrichtlinien zur Verfügung. Sie sind gut durchdacht und enthalten viele Erklärungen zu verschiedenen Themen. Tatsächlich sollte sich jeder Entwickler etwas Zeit nehmen, um den gesamten Abschnitt mit den Designrichtlinien zu lesen .

Wenn es um Akronyme geht , lautet die Faustregel: Bei Akronymen mit zwei Buchstaben werden diese in der Regel in Großbuchstaben geschrieben (wo Pascal-Großbuchstaben anwendbar sind), daher IOStreamkann dies beispielsweise der Name einer Klasse sein. Bei einem längeren Akronym wird der Rest des Akronyms in Kleinbuchstaben geschrieben, z . B. XmlDocumentoder HtmlParser. Dies ist eigentlich eine meist eindeutige Regel (es gibt keine Verwirrung darüber, wo das eine Wort endet und das nächste beginnt, es sei denn, Sie verketten Akronyme aus zwei Buchstaben), und Sie gewöhnen sich sehr schnell daran.

Also, ist es ID oder ID? Nun, laut Microsoft könnte es nicht das sein, was Sie denken:

Akronyme unterscheiden sich von Abkürzungen darin, dass eine Abkürzung ein einzelnes Wort verkürzt. Zum Beispiel, ID ist eine Abkürzung für Bezeichner . Im Allgemeinen sollten Bibliotheksnamen keine Abkürzungen verwenden.

Die beiden Abkürzungen, die in Bezeichnern verwendet werden können, sind ID und OK. In Pascal-Cased Identifiers sollten sie als Id und Ok angezeigt werden. Wenn sie als erstes Wort in einer Kennung mit Kamelgehäuse verwendet werden, sollten sie als id bzw. ok angezeigt werden.

Anekdotisch bin ich mir nicht sicher, wann diese Unterscheidung in den Richtlinien auftauchte, aber vor ein paar Jahren (um 3.0 / 3.5) ging der allgemeine Benennungstrend in Klassenbibliotheken von ID zu Id.

Daniel B
quelle
1
Dies ist die Richtlinie, die ich normalerweise befolge. Da id eine Abkürzung und kein Akronym ist, bevorzuge ich immer die Verwendung von 'Id'.
Toby
Ich benutze ID, weil es dann die Konvention bricht und als einzigartig heraussticht, und ich mag die Ironie davon :)
RhysW
Ich denke Microsoft liegt falsch. ID ist ein Initialismus für Identitätsdokument, es ist nicht kurz für Identität. (Akronyme sind pedantisch aussprechbar.)
Tom Hawtin - Tackline
@ Tomhawtin-tackline Du machst einen interessanten Punkt, obwohl ich vermute, dass es vom Kontext abhängt. So etwas wie eine IDNumber-Eigenschaft für ein Person-Objekt wäre sehr sinnvoll, aber wenn eine VehicleId als "Fahrzeugidentitätsdokument" oder "Fahrzeugidentifikator" gelesen würde? Im Programmierkontext ist bezeichner ein gängiges Wort für alles, was eine Instanz eindeutig identifiziert, und ich würde argumentieren, dass es hier besser anwendbar ist.
Daniel B
@DanielB In Computersprachen, auch in SQL, bezieht sich "Bezeichner" normalerweise auf einen Namen, z. B. den Namen einer Spalte. Normalerweise wird es mit "ident" abgekürzt. Das Fahrzeug ist ein interessantes Beispiel, da es etablierte VIN-Schemata (Vehicle Identification Numbers) gibt. In einem typischen Programmierkontext ist das "Dokument" für eine Entität eine Zahl (kann sogar eine nicht fälschbare Fähigkeit sein).
Tom Hawtin - Tackline
15

Ich habe eine sehr gute Erklärung im Dokument einiger Codierungskonventionen gelesen. CamelCase sollte immer für Akronyme und Abkürzungen verwendet werden, da es einfacher ist, Wortgrenzen zu unterscheiden (vergleiche XmlIdWritermit XMLIDWriter).

gilden
quelle
12
Hier ist eine noch bessere Idee zur Unterscheidung von Wortgrenzen: tatsächliche Wortgrenzen! xml_id_writer.
Kaz
4
@ Kaz Nun, duh! CamelCase wird jedoch traditionell in einigen Sprachen verwendet, und die Verwendung von Unterstrichen in solchen Situationen erscheint eher unangebracht. Konsistenz ist König, wie bereits erwähnt.
Gilden
1
Nur weil die Kernbibliotheken einiger Sprachen CamelCase verwenden, ist dies keine Konsistenz, sondern Konformität.
Kaz
3
@Kaz: Sie haben größere Kämpfe in Ihrem Shop als Code-Konventionen.
Robert Harvey
2

Wie wir in der Standardfunktion von JavaScript sehen können getElementById (); ID ist in Camel Fall geschrieben ...

Verwenden Sie 'id', wenn Sie mit einem Unterstrich arbeiten. Beispiel: user_id

Verwenden Sie 'Id', wenn Sie eine Variable ohne Unterstrich benennen, um die verschiedenen Wörter zu unterscheiden. Beispiel: userId

Wenn es sich um eine einzelne Wortvariable handelt, sollte sie vollständig in Kleinbuchstaben geschrieben werden. Beispiel: thisIsExample

Aber ich würde 'ID' nicht in CAPS empfehlen, da wir im Allgemeinen alle Caps zum Definieren von CONSTANTS verwenden.

Sukrit Gupta
quelle
In Ihrem dritten Absatz scheint Ihr Beispiel nicht mit Ihrem Text übereinzustimmen?
Ruakh
@ruakh Thanx .. Berichtigt ..
Sukrit Gupta
0

Vermeiden Sie zunächst die Abkürzung.

Zweitens, wenn die Abkürzung sehr bekannt ist, empfehle ich die Verwendung eines Kamelkoffers.

Das liegt daran, dass Sie die Bedeutung davon nicht berücksichtigen müssen. behandeln Sie es einfach wie ein normales Wort

Sungguk Lim
quelle