Akronyme in CamelCase [geschlossen]

243

Ich habe Zweifel an CamelCase. Angenommen, Sie haben dieses Akronym:Unesco = United Nations Educational, Scientific and Cultural Organization.

Sie sollten schreiben: unitedNationsEducationalScientificAndCulturalOrganization

Aber was ist, wenn Sie das Akronym schreiben müssen? Etwas wie:

getUnescoProperties();

Ist es richtig, es so zu schreiben? getUnescoProperties() OR getUNESCOProperties();

gal007
quelle
2
Sollte dies nicht auf Programmierern sein.
Pacerier
5
Die IMO-Konvertierung in snake_case zeigt die beste Lösung. Magst du get_unesco_propertiesoder get_u_n_e_s_c_o_properties?
Jchook
In Verbindung stehender Beitrag - Sollte die Variable ID oder ID heißen?
RBT

Antworten:

195

Einige Richtlinien, über die Microsoft geschrieben hat, camelCasesind:

Wenn Sie Akronyme verwenden, verwenden Sie Pascal oder Kamel für Akronyme mit mehr als zwei Zeichen. Verwenden Sie zum Beispiel HtmlButtonoder htmlButton. Allerdings sollten Sie Abkürzungen nutzen , die nur aus zwei Zeichen bestehen, wie zum Beispiel System.IOstatt System.Io.

Verwenden Sie keine Abkürzungen in Bezeichnern oder Parameternamen. Wenn Sie Abkürzungen verwenden müssen, verwenden Sie Kamel-Groß- und Kleinschreibung für Abkürzungen, die aus mehr als zwei Zeichen bestehen, auch wenn dies der Standardabkürzung des Wortes widerspricht.

Zusammenfassen:

  • Wenn Sie eine Abkürzung oder ein Akronym mit zwei Zeichen verwenden, setzen Sie alle in Großbuchstaben.

  • Wenn das Akronym länger als zwei Zeichen ist, verwenden Sie ein Großbuchstaben für das erste Zeichen.

Also, in Ihrem speziellen Fall getUnescoProperties()ist richtig.

Apollo SOFTWARE
quelle
11
Ich denke, ich sollte IDstattdessen anfangen zu verwenden Id(was ich überall benutze / sehe)
Jasonscript
30
Technisch gesehen ist "ID" kein Akronym (es ist eine Abkürzung für "Identifier" oder "Identification"), aber ich weiß nicht wirklich, wie / ob diese Richtlinie dabei hilft. : - \
Bryant
63
Ich denke nicht, dass dies ein guter Standard ist. Die Unterscheidung zwischen normalen Akronymen, Zwei-Buchstaben-Akronymen und normalen Wörtern scheint überkompliziert und widerspricht der Vorstellung einer einheitlichen Namenskonvention.
Sam
40
Wenn Microsoft angegeben wird, wird etwas nicht "korrekt".
Sam
48
Es ist schön zu wissen, dass sie ihren eigenen Richtlinien folgen: Sie stammen XMLHttpRequest()ursprünglich von Microsoft.
Makyen
314

Es gibt berechtigte Kritik an den Microsoft-Ratschlägen aus der akzeptierten Antwort.

  • Inkonsistente Behandlung von Akronymen / Initialismen in Abhängigkeit von der Anzahl der Zeichen:
    • playerIDvs playerIdvs playerIdentifier.
  • Die Frage, ob aus zwei Buchstaben bestehende Akronyme noch großgeschrieben werden sollen, wenn sie am Anfang des Bezeichners stehen:
    • USTaxes vs. usTaxes
  • Schwierigkeiten bei der Unterscheidung mehrerer Akronyme:
    • dh USIDvs usId(oder parseDBMXMLim Beispiel von Wikipedia).

Daher werde ich diese Antwort als Alternative zur akzeptierten Antwort veröffentlichen. Alle Akronyme sollten konsistent behandelt werden. Akronyme sollten wie jedes andere Wort behandelt werden. Wikipedia zitieren :

... einige Programmierer bevorzugen es, Abkürzungen so zu behandeln, als wären sie Kleinbuchstaben ...

Also bezüglich der Frage von OP stimme ich der akzeptierten Antwort zu. das ist richtig:getUnescoProperties()

Aber ich denke, ich würde in diesen Beispielen zu einem anderen Ergebnis kommen:

  • US TaxesusTaxes
  • Player IDplayerId

Stimmen Sie also für diese Antwort ab, wenn Sie der Meinung sind, dass aus zwei Buchstaben bestehende Akronyme wie andere Akronyme behandelt werden sollten.

Camel Case ist eine Konvention, keine Spezifikation. Ich denke also, dass es populäre Meinungsregeln gibt.

( BEARBEITEN: Entfernen dieses Vorschlags, dass Stimmen über dieses Problem entscheiden sollten; wie @Brian David sagt; Stapelüberlauf ist kein "Beliebtheitswettbewerb", und diese Frage wurde als "meinungsbasiert" geschlossen.)

Obwohl viele es vorziehen, Akronyme wie jedes andere Wort zu behandeln, besteht die üblichere Praxis darin, Akronyme in Großbuchstaben zu setzen (obwohl dies zu "Greueln" führt).

Andere Ressourcen:

  • Beachten Sie, dass einige Leute zwischen Abkürzungen und Akronymen unterscheiden
  • Hinweis Microsoft-Richtlinien unterscheiden zwischen zweistelligen Akronymen und "Akronymen mit mehr als zwei Zeichen Länge".
  • Beachten Sie, dass einige Leute empfehlen, Abkürzungen / Akronyme insgesamt zu vermeiden
  • Beachten Sie, dass einige Leute empfehlen, CamelCase / PascalCase ganz zu vermeiden
  • Beachten Sie, dass einige Leute zwischen "Konsistenz" als "Regeln, die intern inkonsistent erscheinen" unterscheiden (dh Behandlung von Akronymen mit zwei Zeichen, die sich von Akronymen mit drei Zeichen unterscheiden). Einige Leute definieren "Konsistenz" als "konsistente Anwendung derselben Regel" (selbst wenn die Regel intern inkonsistent ist).
  • Richtlinien für das Framework-Design
  • Microsoft-Richtlinien
Die rote Erbse
quelle
26
1) Es gibt keine Inkonsistenz. "Id" ist eine Abkürzung , kein Akronym. 2) Dies hängt vom Kontext des Bezeichners ab, dh von Klasse, Schnittstelle, Attribut, Aufzählungstyp, statischem Feld, Parameter, Methode, Eigenschaft oder Ereignis. Wenn die Richtlinie für den Bezeichner PascalCase verwendet, ist dies USTaxesund PlayerId; camelCase: usTaxesund playerId. 3) Es wäre USIdin PascalCase, usIdin camelCase und parseDbmXmlin camelCase.
Frederik Krautwald
6
Du hast recht, es ist eine Abkürzung. Mein Punkt ist, dass es UsTaxes, UsId sein sollte. Zwei Buchstaben "Abkürzung oder Akronym" sollten nicht anders behandelt werden als Drei Buchstaben oder andere "normale Wörter". Ein weiterer Ratschlag aus der Antwort von @ Eonil ist, Kürzungen insgesamt zu vermeiden. unitedStatesTaxes oder playerIdentifier.
Die rote Erbse
3
Ha ha. Ich bezweifle, dass die Verwirrung entstehen würde - viel -, aber die Richtlinien sind Richtlinien, um mögliche Verwirrung zu verhindern. Ein erfundenes (schlechtes) Akronymbeispiel in einem wissenschaftlichen Kontext: InIN(item)vs InIn(item)(Hinweis: IN ist Zoll (e)). Oder IDById(id)vs IdById(id), Kontextwissenschaft (Hinweis: ID bedeutet infektiöse Krankheit). "Zwei Zeichen lang" - was in welchem ​​Kontext?
Frederik Krautwald
2
Unter dem Microsoft-Link "... verwenden Sie Pascal-Groß- oder Kleinschreibung für Akronyme mit mehr als zwei Zeichen . ... Sie sollten jedoch Akronyme großschreiben, die nur aus zwei Zeichen bestehen ..." Dies ist der Teil, den ich als "inkonsistent" bezeichnen würde ". Eine bessere Charakterisierung ist "Ausnahme". Und zumindest haben Sie begründet, warum zwei Buchstabenakronyme verwirrender sein könnten. Aber ich denke, diese Programme mit "CanCan" haben einfach kein Glück. mehrdeutig, ob es sich um die Tanzbewegung oder um das Community Area Network des Cercle de l'Aviron de Nantes handelt :)
Die rote Erbse
18
Der Autor von Capital Offense: Umgang mit Abkürzungen in CamelCase ruft den Begriff "Abomination" korrekt auf, wenn er schreibt: "Während [mit Akronymen in Großbuchstaben] in einfachen Fällen funktioniert, führt dies zu Abscheulichkeiten, wenn eine Abkürzung auf eine andere folgt: HTTPURLConnection, XMLIDREF"
kghastie
21

Zunächst muss ich klarstellen, dass ich kein englischer Muttersprachler bin , sodass meine Behauptung über die englische Grammatik einfach falsch sein kann. Wenn Sie solche Fehler entdecken, lassen Sie es mich bitte wissen, und ich werde sehr dankbar sein.


Die beste Vorgehensweise für Akronyme besteht darin, Akronyme so weit wie möglich zu vermeiden. Dies ist jedoch nicht der Fall, da das Akronym UNESCObekannter ist als der vollständige Name UnitedNationsEducationalScientificAndCulturalOrganization.

Dann denke ich, UNESCOmacht mehr Sinn, als Unescoweil es einfach näher an der realen Lebensform ist, die so vertraut ist. Ich hatte einige Probleme herauszufinden, was das Wort Unescoeigentlich bedeutet.

Denken Sie als weiteres Beispiel darüber nach Arc. Das klingt wie eine Kurve um einen Kreis, aber in Rust bedeutet das Atomically Reference Counted. Wenn es so geschrieben wurde ARC, würden zumindest die Leser erkennen, dass das Wort eher ein Akronym für etwas anderes als eine Art Kurve ist.

Moderne Programme sind hauptsächlich für menschliche Leser geschrieben. Dann müssen diese Namensregeln für die Lesbarkeit des Menschen festgelegt werden und nicht für die maschinelle Verarbeitung oder Analyse.

In dieser Perspektive verlieren wir etwas Lesbarkeit, wenn wir UnescoOver verwenden UNESCOund nichts gewinnen.

Und für alle anderen Fälle denke ich, dass es für die meisten Fälle ausreicht , nur einfache englische Akronymregeln (oder Konventionen) zu befolgen , um die beste Lesbarkeit zu gewährleisten .

Eonil
quelle
4
Die obigen Beispiele sind etwas irreführend. "Der beste Ansatz, den ich je gesehen habe, war der von Apple ... Das bedeutet, Akronyme wie ein Eigenname zu behandeln ... Die UNESCO macht also mehr Sinn" - So schreiben Sie keine Eigennamen.
Mikko Rantanen
@MikkoRantanen Ich habe meine Antwort aktualisiert.
Eonil
7
Wow, ich kann kaum einen Satz in dieser Antwort finden, dem ich zustimmen würde :-)
Josef Sábl
Es hängt ganz vom Kontext des Codes ab, an dem Sie arbeiten, ob Abkürzungen / Akronyme mehr oder weniger sinnvoll sind. Zum Beispiel arbeite ich im Finanzwesen, und es gibt so viele einzigartige Begriffe, die in der Branche und in der Tat auf der ganzen Welt einheitlich sind. Sie würden Zeit verschwenden und unnötige Ausführlichkeit schaffen, wenn Sie keine Akronyme verwenden, die jeder, der in diesem Unternehmen arbeitet, auswendig kennt. ZB PV für Barwert, FV für zukünftigen Wert, Durchschnitt für Durchschnitt, Exp für Exponent usw.
Will Ediger
@ pm100 Habe ich das nicht gesagt? UNESCO ist nicht, wie man Eigennamen schreibt.
Mikko Rantanen
17

Für die Konvertierung in CamelCase gibt es auch den (fast) deterministischen Camel- Fallalgorithmus von Google :

Beginnend mit der Prosaform des Namens:

  1. Konvertieren Sie die Phrase in einfaches ASCII und entfernen Sie alle Apostrophe. Zum Beispiel könnte "Müllers Algorithmus" zu "Müllers Algorithmus" werden.
  2. Teilen Sie dieses Ergebnis in Wörter auf, teilen Sie Leerzeichen und verbleibende Satzzeichen (normalerweise Bindestriche) auf.
    1. Empfohlen: Wenn ein Wort im allgemeinen Sprachgebrauch bereits ein herkömmliches Kamelgehäuse aufweist, teilen Sie es in seine Bestandteile auf (z. B. wird "AdWords" zu "AdWords"). Beachten Sie, dass ein Wort wie "iOS" an sich nicht wirklich im Kamelfall vorkommt. Es widerspricht jeder Konvention, daher gilt diese Empfehlung nicht.
  3. Jetzt alles in Kleinbuchstaben (einschließlich Akronyme), dann nur das erste Zeichen von:
    1. … Jedes Wort, um Großbuchstaben zu ergeben, oder
    2. … Jedes Wort außer dem ersten, um einen niedrigeren Kamelfall zu erhalten
  4. Fügen Sie schließlich alle Wörter zu einer einzigen Kennung zusammen.

Beachten Sie, dass die Groß- und Kleinschreibung der ursprünglichen Wörter fast vollständig ignoriert wird.

In den folgenden Beispielen wird "XML-HTTP-Anforderung" korrekt in XmlHttpRequest umgewandelt, XMLHTTPRequest ist falsch.

serv-inc
quelle
17

getUnescoProperties() sollte die beste Lösung sein ...

Wenn möglich, folgen camelCaseSie einfach dem reinen , wenn Sie Akronyme haben, lassen Sie sie einfach in Großbuchstaben, wenn möglich, sonst gehen camelCase.

Im Allgemeinen sollten in OO-Programmiervariablen mit Kleinbuchstaben ( lowerCamelCase) und Klassen mit Großbuchstaben () beginnenUpperCamelCase ) beginnen.

Im Zweifelsfall einfach rein gehen camelCase;)

parseXMList in Ordnung, parseXmlist auchcamelCase

XMLHTTPRequestsein sollte XmlHttpRequestoder xmlHttpRequestkeine Möglichkeit , mit anschließenden Großbuchstaben Akronymen zu gehen, ist es definitiv für alle Testfälle nicht klar.

zB wie lesen Sie dieses Wort HTTPSSLRequest, HTTP + SSLoder HTTPS + SL(das bedeutet nicht alles andere als ...), in diesem Fall folgen Kamel Fall Konvention und gehen Sie für httpSslRequestoder httpsSlRequest, vielleicht ist es nicht mehr schön, aber es ist auf jeden Fall klar.

luk_z
quelle
2
Ich mag Ihr HTTPSSLBeispiel, obwohl SL nichts bedeutet, wie wäre es mit etwas wie HTTPSSHTunnel? Ist es HTTPS + SH (Shell) oder HTTP + SSH? Die Google-Konvention ist definitiv weniger zweideutig.
L. Holanda
10

Bei github gibt es einen Airbnb-JavaScript- Styleguide mit vielen Sternen (derzeit ~ 57,5 ​​KB) und Anleitungen zu Akronymen, die besagen:

Akronyme und Initialismen sollten immer alle groß oder in Kleinbuchstaben geschrieben werden.

Warum? Namen dienen der Lesbarkeit und nicht der Beruhigung eines Computeralgorithmus.

// bad
import SmsContainer from './containers/SmsContainer';

// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];
Valex
quelle
7
" Warum? Namen dienen der Lesbarkeit, um einen Computeralgorithmus nicht zu beschwichtigen ". Ist sie XMLHTTPRequestalso viel besser lesbar als XmlHttpRequest, richtig?
L. Holanda
2
Macht keinen Sinn, warum httpRequestsals gut angesehen wird, aber HttpRequestsschlecht ist. Nach diesem Prinzip sollte dann für XML HTTP Request sein xmlhttpRequest???
L. Holanda
1
Ich zitiere oft den AirBnb-Styleguide, aber in diesem Fall stimme ich nicht zu. Ich stimme ihrer Aussage insbesondere nicht zu: "Akronyme und Initialismen sollten immer in Groß- oder Kleinbuchstaben geschrieben werden." xmlHttpRequestist lesbarer als XMLHTTPRequestmeiner Meinung nach.
Ronan
3

Derzeit verwende ich die folgenden Regeln:

  1. Kapital Fall für Akronyme: XMLHTTPRequest, xmlHTTPRequest, requestIPAddress.

  2. Kamel Fall für Abkürzungen: ID[entifier], Exe[cutable], App[lication].

ID ist eine Ausnahme, sorry aber wahr.

Wenn ich einen Großbuchstaben sehe, nehme ich ein Akronym an, dh ein separates Wort für jeden Buchstaben. Abkürzungen haben nicht für jeden Buchstaben ein eigenes Wort, daher verwende ich Kamelkoffer.

XMLHTTPRequest ist mehrdeutig, aber es ist ein seltener Fall und es ist nicht so vieldeutig, also ist es in Ordnung, Regeln und Logik sind wichtiger als Schönheit.

user2992258
quelle
1

Der JavaScript Airbnb Style Guide spricht ein wenig darüber . Grundsätzlich:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

Da ich normalerweise als Klasse einen führenden Großbuchstaben lese, neige ich dazu, dies zu vermeiden. Am Ende des Tages ist alles Präferenz.

Bryantee
quelle
1

Zusätzlich zu dem, was @valex gesagt hat, möchte ich einige Dinge mit den gegebenen Antworten auf diese Frage zusammenfassen.

Ich denke, die allgemeine Antwort lautet: Es hängt von der Programmiersprache ab, die Sie verwenden.

C Scharf

Microsoft hat einige Richtlinien geschrieben, in denen es anscheinend HtmlButtonder richtige Weg ist, eine Klasse für diese Fälle zu benennen.

Javascript

Javascript hat einige globale Variablen mit Akronymen und verwendet sie alle in Großbuchstaben (aber lustig, nicht immer konsistent). Hier einige Beispiele:

encodeURIComponent XMLHttpRequest toJSON toISOString

lante
quelle
Nun, es ist Netscape alt, es hat sogar einige ohne camelCase wie onerror.
Eddie
1

Haftungsausschluss: Englisch ist nicht mein Mutterton. Aber ich habe lange über dieses Problem nachgedacht, insbesondere wenn ich einen Knoten (Camelcase-Stil) für die Verarbeitung von Datenbanken verwende, da der Name von Tabellenfeldern in die Warteschlange gestellt werden sollte. Dies ist mein Gedanke:

Es gibt zwei Arten von Akronymen für einen Programmierer:

  • in natürlicher Sprache, UNESCO
  • Zum Beispiel in der Computerprogrammiersprache tmc and textMessageContainer, die normalerweise als lokale Variable angezeigt wird.

In der Programmierwelt sollten alle Akronyme in natürlicher Sprache als Wort behandelt werden . Die Gründe dafür sind:

  1. Beim Programmieren sollten wir eine Variable entweder im Akronymstil oder im Nicht-Akronymstil benennen. Wenn wir also eine Funktion getUNESCOProperties nennen, bedeutet dies, dass die UNESCO ein Akronym ist (andernfalls sollten es nicht nur Großbuchstaben sein), aber offensichtlich getund propertieskeine Akronyme. Daher sollten wir diese Funktion entweder gunescop oder getUnitedNationsEducationalScientificAndCulturalOrganizationProperties nennen . Beide sind nicht akzeptabel.

  2. Die natürliche Sprache entwickelt sich kontinuierlich weiter, und die heutigen Akronyme werden morgen zu Wörtern , aber Programme sollten von diesem Trend unabhängig sein und für immer bestehen bleiben.

Übrigens, in der am häufigsten gewählten Antwort ist IO das Akronym in der Bedeutung der Computersprache (steht für InputOutput), aber ich mag den Namen nicht, da ich denke, dass das Akronym (in der Computersprache) nur zum Benennen verwendet werden sollte eine lokale Variable, aber eine Klasse / Funktion der obersten Ebene, daher sollte InputOutput anstelle von IO verwendet werden

xiechao06
quelle
"Zunge", nicht "Ton"
Dan Dascalescu
0

Die UNESCO ist ein Sonderfall, da sie normalerweise (auf Englisch) als Wort und nicht als Akronym gelesen wird - wie UEFA, RADA, BAFTA und im Gegensatz zu BBC, HTML, SSL

user1833431
quelle
1
Dies ist die Unterscheidung zwischen "Akronymen" und bloßen "Abkürzungen"; Diese Unterscheidung scheint für die gesamte Diskussion relevant zu sein, wurde jedoch in den vorgelegten Antworten fast vollständig außer Acht gelassen.
Simon
BBC, HTML, SSL und andere Akronyme, bei denen Sie jeden Buchstaben ausloten, werden genauer als Initialismen bezeichnet. Wörter wie die UNESCO, die als Wort ausgesprochen werden, sind wahre Akronyme.
Lrdwhyt
-2

Es gibt auch eine andere Camelcase-Konvention, die versucht, die Lesbarkeit von Akronymen zu verbessern, indem entweder Großbuchstaben ( HTML) oder Kleinbuchstaben ( html) verwendet werden, wobei jedoch beide ( Html) vermieden werden .

In Ihrem Fall könnten Sie also schreiben getUNESCOProperties. Sie können auch unescoPropertiesfür eine Variable oder UNESCOPropertiesfür eine Klasse schreiben (die Konvention für Klassen beginnt mit Großbuchstaben).

Diese Regel wird schwierig, wenn Sie zwei Akronyme zusammenstellen möchten, z. B. für eine Klasse mit dem Namen XML HTTP Request. Es wäre mit Groß beginnen, aber da XMLHTTPRequestnicht zu lesen wäre einfach (? Ist es XMLH TTP Request), und XMLhttpRequestwürde brechen die Camelcase - Konvention (? Ist es XM LHTTP Request), die beste Option wäre Fall zu mischen: XMLHttpRequest, das ist eigentlich was der W3C benutzt . Von der Verwendung dieser Art von Namen wird jedoch abgeraten. Für dieses Beispiel HTTPRequestwäre ein besserer Name.

Da das offizielle englische Wort für Identifikation / Identität ID zu sein scheint, obwohl es kein Akronym ist, können Sie dort dieselben Regeln anwenden.

Diese Konvention scheint ziemlich beliebt zu sein, aber es ist nur eine Konvention und es gibt kein Richtig oder Falsch. Versuchen Sie einfach, sich an eine Konvention zu halten und stellen Sie sicher, dass Ihre Namen lesbar sind.

Jesús Carrera
quelle
3
Ich glaube diesen ganzen Thread nicht :-) Also wäre es XMLToHtmlConverter aber HTMLToXmlConverter? Wow ...
Josef Sábl
1
@ JosefSábl, ja, so wäre es. In Bezug auf Ihre Ablehnung sage ich nicht, dass ich diese Konvention mag, aber sie existiert definitiv.
Jesús Carrera
1
Ich las die Frage als "Was ist eine gute Konvention zum Schreiben von Accronyms im Kamelfall" und nicht als "Können Sie alle existierenden Konventionen auflisten". Und da ich Ihre erwähnte Konvention als sehr schlecht betrachte, habe ich abgelehnt :-)
Josef Sábl
Nun, die Frage ist "Ist es richtig, es so zu schreiben?", Und da es viele "richtige" Wege gibt, es zu schreiben, weil es nur eine Konvention ist und diese Konvention sehr beliebt ist (unabhängig davon, wie Sie es betrachten), meine Antwort ist sehr gültig :-)
Jesús Carrera