Wie schreibe ich einen Kamelkasten für Wörter wie "Telefonnummer", "Motorrad", "Wellenlänge" usw


75

Ich habe ein Problem beim Verstehen, wie die camelCase-Syntax auf einige meiner Variablennamen angewendet wird .

Wie soll ich zum Beispiel ein Wort wie "Telefonnummer" in Kamelschreibweise richtig schreiben? Ist es phoneNumberoder phonenumber? Ähnlich ist es mit "Benutzername", usernameoder userName?

Ich denke , es ist nicht richtig mit Kamel Fall sieht wie motorCycle, passWord, sunDay, setUpoder , waveLengthda diese nur jeweils ein Wort. Ich denke, das könnte der Grund sein, warum es heißt, hashMapaber hashtableim letzten Fall auch in Kamel-Fällen ohne das Kapital, weil Hash-Tabelle ein Wort ist, während Hash-Map zwei Wörter sind.

Aber wenn das Motorrad eine Farbe hat, würde es dann sein, motorcycleColorda ein Wort verkettet ist? Ist das richtig oder soll es sein phoneNUmber, waveLength, sunBlockund auch sunDayfür den Sonntag der Woche?

Warum zum Beispiel wird die Methode aufgerufen, getISOCountrieswährend sie sagt, dass HttpHeadersz. B. nicht klar ist, was klein geschrieben wird, wenn wir eine Methode wie String camelCaseString = dog.toCamelCase()oder haben interface CamelCase.

Related: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces


7
In Fällen, in denen es für Sie wirklich schwierig ist, zu erkennen, ob ein Satz aus zwei Wörtern ein zusammengesetztes Wort ist, wählen Sie eine Groß- und Kleinschreibung aus und bleiben Sie dabei. Wie bei den meisten Kodierungskonventionen ist es am wichtigsten, innerhalb eines Projekts konsistent zu sein.
Kevin

2
Gute Frage, ich habe mich immer gefragt, wie ich "Dateiname" (und den falschen "Dateinamen") schreiben soll. Ich denke, dieses Wort ist von Programmierer zu Programmierer unterschiedlich geschrieben ...
Ray

3
@ PacMani Sie könnten die Diskussion hier genießen !
Jason C

4
@ 909Niklas Ich würde "name" so oft wie möglich fallen lassen. Verwenden Sie einfach "Straße". Wenn es sich um eine Zeichenfolge handelt, handelt es sich um einen Namen, es sei denn, dies ist schädlich oder verwirrend. usernameist, was es ist, es ist ein Rufzeichen, nicht der "Name des Benutzers", so ist es eher wie Motorrad als Vorname oder Nachname (die camelcased werden sollte)
Peter Turner

2
@PeterTurner Einige Programmierer würden sagen, dass streetdies eine Klasse und nameeines ihrer Attribute / Datenelemente sein sollte.
JAB

Antworten:


173

Sie sollten den Buchstaben nach dem "normalen" Leerzeichen groß schreiben (wenn Sie einen Buchstaben anstelle des Quellcodes schreiben würden). Ihre erste Annahme ist richtig:

  • Es ist ein "Motorrad", kein "Motorrad", also sollte Ihre Variable benannt werden motorcycle, nicht motorCycle.
  • Es ist eine "Hash Map", also gehst du mit hashMap, nicht hashmap.
  • "Sonntag" ist ein Wort -> sundaynicht sunDay.
  • Während "Wochentag" wäre dayOfWeek, nicht dayofweek.

4
Für das, was es wert ist, verwenden mein Team und ich im Allgemeinen hashmapein einziges Wort, obwohl wir ironischerweise nichts dafür tun tree map. Achselzucken
CORSIKA

1
Naja, Motorrad ist ein Randfall (es war ursprünglich ein Motorrad, obwohl das jetzt etwas anderes ist); honeyBee(und zwar honeybeenicht "Honigbiene", sondern "Honigbiene") und butterfly.
Orome

3
Der nicht adressierte setUpFall ist zwar ein Randfall , es ist ein einzelnes Wort, aber JUnithistorisch hat er den Namen der Fixture-Initialisierung setUp.
TC1

23
@ TC1 "setup" ist eigentlich ein Substantiv , niemals ein Verb. Richtige Form der Aktion "einrichten". JUnithat es recht, der Rest von uns ist der Randfall. :)
Jason C

3
@JasonC Danke, endlich macht es Sinn, warum das Gegenstück ist tearDown: D
TC1

44

Teil 1
Ich denke, was Sie auslöst, ist, dass einige Ihrer Beispiele zusammengesetzte Wörter sind , andere nicht.

  • Telefonnummer // kein zusammengesetztes Wort
  • Motorrad // zusammengesetztes Wort
  • Wellenlänge // zusammengesetztes Wort
  • Sonnenschutz // zusammengesetztes Wort
  • Sonntag // zusammengesetztes Wort *
  • Motorradfarbe // zusammengesetztes Wort, das mit einem nicht zusammengesetzten Wort verwendet wird.

Zusammengesetzte Wörter folgen nicht der Schreibweise in Groß- und Kleinschreibung für das zweite Wort im zusammengesetzten Wort.

So ist es motorcycleund nicht motorCycle.

Aber "Telefonnummer" ist kein zusammengesetztes Wort und würde der Schreibweise von Kamelkästen folgen. dh phoneNumber.

Und das führt zu: motorcycleColor.

Wenn ich mich nicht erinnern kann, ob ein Wort wirklich ein zusammengesetztes Wort ist oder nicht, schaue ich im Wörterbuch nach, um sicherzugehen.

Teil 2
Zwei Ihrer Beispiele sind etwas kniffliger.

  • Hash-Karte
  • Hash-tabelle

Sie sind knifflig, weil manche sie als "Hashmap" und "Hashtable" buchstabieren. Laut dem Wörterbuch, das ich gerade überprüft habe, handelt es sich um separate Wörter und nicht um ein zusammengesetztes Wort. Also der richtige Kamelkoffer wäre hashMapund hashTable. Nicht jedes Team hält sich an diese Konvention, also müssen Sie Ihre Teamkollegen fragen, was sie bevorzugen, und sich dann daran halten. Konsistenz ist in diesem Fall wichtiger als das, was ein Wörterbuch für richtig hält.

* Einige werden darüber streiten, dass der Sonntag ein zusammengesetztes Wort ist, da andere Wochentage es nicht sind, aber für die Zwecke dieser Frage werde ich dieses Problem umgehen. Es ist am einfachsten, es als zusammengesetztes Wort zu behandeln und daher kein Kamelfall.


6
Die anderen Wochentage waren ebenfalls allesamt zusammengesetzt: "Montag" <- Mondtag, Dienstag <- Tiw-Tag, Mittwoch <- Wodens Tag, Donnerstag <- Thors Tag, Freitag <
Friggs

6
@ kevincline: Diese Formen der Namen der Tage werden jetzt wahrscheinlich als archaisch angesehen, zählen also für praktische Zwecke nicht wirklich. ... Es sei denn, Sie schreiben tatsächlich Code, der wie if (currentDay == thorsDay) {...Hmm ... aussieht. Schade , dass Bibliotheken dies nicht als Formatierungsoption haben, wenn Sie den vollständigen Namen des Wochentags erhalten möchten.
FrustratedWithFormsDesigner

15
@FrustratedWithFormsDesigner: Der Punkt war, dass im modernen Sprachgebrauch der Sonntag ein zusammengesetztes Wort in demselben Maße ist wie der Montag: überhaupt nicht. Es ist nur ein Zufall, dass die "Sonne" in "Sonntag" alleine stehen kann, während "
Mondtag

6
Besser noch, verwenden Sie bessere Namen für Ihre Variablen als hashMap oder hashTable. Es ist eine glatte Straße, die zu dieser wunderbaren Codezeile führt:HashMap hashMap = new HashMap();
Eric Andres

8

Wie andere bereits betont haben, wird beim Zusammenfügen von Wörtern die Kamelschreibweise verwendet. Verwenden Sie Kamelkasten nicht innerhalb eines einzelnen englischen Wortes. Das Problem besteht darin, zu bestimmen, welche Verbindungen einzelne Wörter sind. Den Programmierern bleibt es überlassen, je nach ihren Englischkenntnissen unterschiedliche Entscheidungen zu treffen. Dies führt zu Inkonsistenzen in der Großschreibung, die fast so ärgerlich sind wie Rechtschreibfehler.

Um dies zu verhindern, sollten Programmierer einen Standardverweis (z. B. dictionary.com ) verwenden, wenn sie sich hinsichtlich der Schreibweise oder der Großschreibung nicht sicher sind. Auch wenn für Ihr Projekt eine einheitliche Benennung wichtig ist, gibt es keinen Ersatz für die Codeüberprüfung.

Wenn Sie eine einzige Referenz für Ihr Projekt auswählen, werden die meisten Argumente zu Groß- und Kleinschreibung gelöst. Es gibt einige Verbindungen wie Hashtable, die nicht in Wörterbüchern enthalten sind, sondern in den Java- und C # -APIs als einzelne Wörter großgeschrieben werden. Sie werden eine projektweite Entscheidung darüber treffen wollen. In Java ist es "HashMap", aber "Hashtable". IMO "Hashtable" ist eindeutig falsch; Es wird nie als einzelnes Wort angezeigt, außer als Name in einer API.


4

Der einfachste Weg, einen Kamelfall zu machen, ist die Wortabgrenzung.

Beispiele aus Ihrer Frage:

  • Telefonnummer: phoneNumber
  • Motorrad: Motorrad
  • Sonntag: Sonntag
  • Wellenlänge: Wellenlänge

Wenn Sie es nicht in zwei Wörter aufteilen würden, sollten Sie auch keinen Kamelkasten verwenden. Ansonsten benutzt du es auf Silben und wie albern sieht das aus

  • auxIlIArY (Dies ist ein 5-Silben-Wort; ganz zu schweigen davon, dass I auf nicht-monospaced / serifenlosen Schriften wie Mist aussieht).

5
Telefonnummer ist nicht das eigene Wort, setzen Sie es in Google als ein einzelnes Wort, es wird glücklich alles nachschlagen, das "Telefonnummer" nicht Telefonnummer hat. Und Setup besteht nicht aus zwei Wörtern, auch nicht aus einem Passwort.
Jeff Langemeier

6
@JeffLangemeier Eine sehr kleine Auseinandersetzung: "setup" ist ein Substantiv, während "set up" ein Verb ist. Wenn Sie also ein Objekt haben, das darstellt, wie etwas eingerichtet ist, wird es aufgerufen setup, und wenn Sie eine Funktion zum Einrichten von etwas haben, wird es aufgerufen setUp.
Bdesham

2
@bdesham Mir ist klar, dass, aber ich würde mich einfach von setUp fernhalten, da ein besseres, weniger mehrdeutiges Verb initialisiert werden würde, habe ich die Verbversion von setup tatsächlich komplett vergessen.
Jeff Langemeier

1
Ich würde denken, dass derjenige, der mit "wa" beginnt, entweder sein könnte wavelengthoder davon waveLengthabhängt, ob sich der fragliche Wert auf die Ausbreitungsgeschwindigkeit geteilt durch die Frequenz bezieht oder ob er sich auf die "Länge" (nicht notwendigerweise die Entfernung) einer Art Welle bezieht . Zum Beispiel wäre die Variable einer Audiosynthesebibliothek für die Anzahl der einer Welle zugeordneten Samples nicht wavelengthaber waveLength.
Supercat

2
@kevincline: In Audiosynthese-Engines ist es üblich, Wave-Tabellen zu haben, die ein oder mehrere ganze Samples einer Wave enthalten. Wenn die Wiedergabe das Ende der Tabelle erreicht, springt sie entweder zum Anfang (bei einfachen Engines) oder zu einem anderen Punkt in der Welle zurück. Natürlich WaveLengthwäre dies für sich genommen in den einfachsten Szenarien etwas vage [bezieht sich dies auf die Puffergröße oder die Länge des Schleifenabschnitts], aber die Wörter könnten durchaus in einem längeren Namen vorkommen.
Supercat

4

Hier stört eine Komplikation mit einfachem Englisch, wie man später Englisch missbraucht, um es mit den Leerraumregeln von Tokens in Programmierkontexten in Einklang zu bringen.

Von den von Ihnen angegebenen Beispielwörtern sind fast alle Verbindungen. Der Sonntag ist nicht so lange her, dass er als Verbindung entstanden ist, und er kann heute kaum noch als solche bezeichnet werden, zumal sein Engagement für die Sonne eher eine historische Kuriosität als ein wichtiger Bestandteil des religiösen und kulturellen Lebens ist ausblick englischsprachiger menschen.

Und auf Englisch sind die drei wichtigsten Möglichkeiten, eine Verbindung zu schreiben, offen (mit einem Leerzeichen zwischen den beiden Wörtern), getrennt und geschlossen (ohne Leerzeichen oder Bindestrich zwischen den beiden). Und obwohl es in bestimmten Situationen einige Regeln zum Silbentrennen offener Verbindungen gibt, gibt es nicht wirklich viele feste Regeln, um zu wissen, welche Form für eine bestimmte Verbindung verwendet wird, außer zu sehen, was andere Leute tun, und es gibt immer noch Zeiten, in denen Sie werden feststellen , zwei oder sogar alle drei Formen ( eggbeater , eggbeater und Eiklopfer zum Beispiel).

Hier wird die Telefonnummer fast immer offen geschrieben, daher sollte sie als zwei Wörter behandelt werden.

Und wenn Sie ein Token mit einer Kappe versehen, wird das Leerzeichen oder der Bindestrich entfernt und das zweite und nachfolgende Wort in Großbuchstaben geschrieben, daher phoneNumberoder PhoneNumberentsprechend Ihrer Konvention.

Das Ding , das macht phoneNumberseltsam erscheinen , ist wahrscheinlich , dass es mehr ist allgemein als nur gegeben phonein den meisten Kontexten oder wie numberwenn der Kontext über eine Telefonverbindung.


2

Stellen Sie die Konsistenz innerhalb der Codedatei sicher.

Konsistenz innerhalb des Code-Projekts fördern.

Bevorzugen Sie die Konsistenz innerhalb der Codebibliothek.

Die Verbindung von Wörtern zur Darstellung von Konzepten ändert sich, wenn wir mit einer bestimmten Agglutination vertraut werden .

Zum Beispiel...

  • "Telefonapparat" wurde zu "Telefon" gekürzt
  • "Telefon" wurde zu "Telefon" gekürzt
  • 'Telefonnummer' wurde manchmal unter 'Telefonnummer' zusammengefasst
  • Aus 'Telefonnummer' wurde bald 'Telefonnummer'
  • "Telefonnummer" wird oft weiter zu "Telefon" verkürzt
  • "Handy" oder einfach "Handy" sind heutzutage weit verbreitet
  • "Homephone" und "Workphone" könnten bald ebenfalls üblich werden

Beachten Sie, dass sich die StackExchange-Rechtschreibprüfung nicht entscheiden kann. 'Telefonnummer' am Ende des obigen Satzes war in Ordnung, kennzeichnet jedoch die Nummer am Anfang des Satzes (mit oder ohne Großbuchstaben).

So sehr sich fast jeder wünscht, es gäbe "einen richtigen Weg", um Dinge zu tun, wenn es um Sprache geht, die es niemals geben kann. Bis zum Abschluss Ihres Projekts wird sich die Nutzung wahrscheinlich geändert haben. Sicherlich hat sich Ihr Verständnis geändert und die Funktionalität der Methode / et.al. wird sich wohl auch geändert haben. (In diesem Fall sollten Sie den Namen wahrscheinlich entsprechend ändern.)


-1

Aus einer rein technischen (US) Perspektive, in der xxx-yyy-zzzz die "Telefonnummer" ist, wird der xxx-Teil ordnungsgemäß als Vorwahl bezeichnet, der yyy-Teil wird ordnungsgemäß als Vorwahl bezeichnet austauschen, und die zzzz wird ordnungsgemäß als die Nummer bezeichnet.

Da "Telefonnummer" nicht nur (noch) kein zusammengesetztes Wort ist, sondern, wenn es eins wird, fälschlicherweise auf etwas außerhalb der Absicht seines Erstellers verweist, würde ich sagen, dass die camelCase-Syntax für jede Variable, die darauf verweist, phoneNumber erfordert, aber if Wenn Sie mit dem eigentlichen Telefonsystem nichts anfangen wollen, würde ich phoneExchangeNumber für die siebenstellige und phoneACExchangeNumber für die zehnstellige Version verwenden.


1
dies scheint nicht alles zu bieten erhebliche über Punkte gemacht und erklärt in diesem Stand der Antwort , die vor mehr als 3 Jahren geschrieben wurde
gnat
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.