Ich arbeite viel in Python und Java, und beide Sprachen haben ziemlich gemeinsame (wenn auch nicht universelle) Konventionen, wie die Großschreibung in Bezeichnern verwendet werden soll: sowohl PascalCase
für Klassennamen als auch ALL_CAPS
für "globale" Konstanten, aber für andere Bezeichner a Viele Java-Codes werden verwendet, mixedCase
wohingegen viele Python-Codes verwendet werden underscore_delimiters
. Ich weiß, dass keine Sprache oder Bibliothek eine bestimmte Groß- oder Kleinschreibung erzwingt , aber ich habe festgestellt, dass mein Code viel besser lesbar erscheint, wenn ich mich an die Standardkonventionen für die von mir verwendete Sprache halte.
Jetzt starte ich ein Projekt in C ++ und möchte dieselbe Idee anwenden. Gibt es eine gängige Konvention für die Großschreibung, über die ich Bescheid wissen sollte?
quelle
Antworten:
C ++ basiert auf C, das alt genug ist, um eine ganze Reihe von Namenskonventionen zu entwickeln, als C ++ erfunden wurde. Dann fügte C ++ einige hinzu, und C war auch nicht müde, an neue zu denken. Hinzu kommen die vielen C-abgeleiteten Sprachen, die die C-Namenskonventionen ihres Erfinders weiterentwickelt haben, bis zu dem Punkt, an dem sie sich auf C und C ++ rückdüngten ... Mit anderen Worten: C ++ hat keine, aber viele solcher Konventionen.
Wenn Sie jedoch nach einer Namenskonvention suchen , können Sie sich auch die Namenskonvention der Standardbibliothek ansehen , da dies die einzige ist, die alle C ++ - Entwickler kennen und gewohnt sein müssen.
Was auch immer Sie als wichtigste Regel verwenden: Seien Sie konsequent!
Interessanterweise habe ich mich im Laufe der Jahre immer mehr mit der standard_library_convention beschäftigt, als ich mit einer Mischung aus PascalCase und camelCase begann und an zahlreichen Projekten mit noch mehr Namenskonventionen beteiligt war. Frag mich nicht warum.
quelle
egptr
,sputn
unduflow
als auchunderflow
. Das ist einfach urkomisch!) Wie auch immer, ja, die std lib all_lowercase_with_underscores heute verwendet.Lassen Sie uns zunächst zustimmen, dass ALL UPPERCASE ein Dorn im Auge ist und minimiert werden sollte.
In C und C ++ wird es daher als Konvention für Makros und nur für Makros verwendet, da Makros ebenso hässlich sind, um nicht zu sagen böse.
Frühes C hatte keine Konstante, also mussten Konstanten als Makros ausgedrückt werden. In jenen frühen Tagen waren die Programme auch viel kürzer, so dass die heute unguten Praktiken angewendet werden konnten (z. B. schrieb IIRC Brian Kernighan Code mit vielen Nicht-Großbuchstaben-Makros). Zu jener Zeit gab es Tastaturen ohne Kleinbuchstaben. Ich habe einen solchen auf dem norwegischen Tandberg EC-10-Computer verwendet, ungefähr 1980 oder 1979, glaube ich.
Java hat also die Konvention für Konstanten in Großbuchstaben von Anfang C aufgegriffen. In der Zwischenzeit und vielleicht sogar vorher (ich bin mir der Chronologie hier nicht sicher) hat C Konstanten bekommen. Während natürlich einige / viele C-Programmierer in der früheren Konvention der Notwendigkeit von Konstanten als Großbuchstabenmakros feststeckten, waren C ++ - Programmierer vernünftiger.
Das große Problem besteht heutzutage darin, dass den Menschen zuerst Java oder C (mit Konventionen aus dem Mittelalter) beigebracht wird und sie dann zu C ++ kommen und diese unlauteren Konventionen in Großbuchstaben mitnehmen.
So,
Nun, Sie hätten vielleicht gedacht, ich hätte im Scherz nur Tastaturen mit Großbuchstaben erwähnt. Ach nein. Denn das ist nur die älteste, archaischste Technologie-Einschränkung, die Namenskonventionen hervorgerufen oder zumindest beeinflusst hat, wie falsch / richtig sie ausgesehen haben. Als nächstes gab es das Problem der seriellen 7-Bit-Übertragung, das entsprechende Probleme mit den verwendeten Zeichencodes (Newspeak-Zeichencodierungen) verursachte, was bedeutete, dass Sie sich auf die Buchstaben des englischen Alphabets A bis Z beschränken mussten.
Eigentlich empfehle ich das immer noch zu tun. Da sind wir! Wir sind nicht weiter gekommen.
Gegenwärtig unterstützt Standard-C ++ ab 2011 allgemeines Unicode in Namen (und dies seit 1998), während dies bei tatsächlichen C ++ - Implementierungen nicht der Fall ist. Insbesondere der g ++ Compiler ist national geprägt. Es stammt aus dieser technologischen Einschränkung des dunklen Zeitalters.
So,
Schließlich zum Thema Unterstriche im Vergleich zu eingestreuten Großbuchstaben:
Ich denke, das ist es wirklich, abgesehen von Regeln wie "Vermeiden Sie generell Namen mit einem Buchstaben außer (Schleife, Template-Parameter, bla bla)" und "Vermeiden Sie die Verwendung von l, leicht zu verwechseln mit 1" und "Vermeiden Sie Großbuchstaben O, leicht zu verwechseln" mit 0 ". Vermeiden Sie es natürlich auch, reservierte Namen zu verwenden, z. B. mit einem Unterstrich gefolgt von einem Großbuchstaben, der zwei aufeinanderfolgende Unterstriche enthält, oder mit einem Unterstrich zu beginnen und sich im globalen Namespace zu befinden.
Prost & Hth
quelle
const
von C ++, also musste dies vor sehr langer Zeit geschehen sein und lange vor Java, wahrscheinlich für C89.+1
für "Sei konsequent!" Ich frage mich, warum ich vergessen habe, diese wichtigste Regel in meiner Antwort zu erwähnen, als es die war, die ich nie vergessen habe, meinen Schülern mitzuteilen. Ich nehme an, Sie werden mir vergeben, wenn ich es jetzt als nachträglicher Gedanke zu meiner Antwort hinzufüge?Normalerweise halte ich mich an die Konvention, die ich in vorhandenen Codebasen für die Sprache am häufigsten sehe. Im Fall von C ++ sehe ich normalerweise camelCase. Im Falle von Ruby oder PHP sehe ich normalerweise stuff_like_this.
Realistisch gesehen ist es jedoch am wichtigsten, dass Sie eine Stilkonvention auswählen, die nicht völlig verrückt ist (dOnT_dO_tHiS) und mit dieser übereinstimmt. Stellen Sie sicher, dass sich der Stil im gesamten Code für ein bestimmtes Projekt nicht ändert. Wenn Sie an einem vorhandenen Projekt arbeiten, möchten Sie den bereits vorhandenen Stil verwenden.
quelle
Nun, es gibt Systeme ungarischen, die auch jetzt noch sehr verbreitet sind, aber ich würde lieber meine eigene Kehle durchschneiden, als es zu empfehlen. Apps Hungarian ist besser, da die Beschriftungszeichen wirklich auf die Semantik hinweisen, obwohl ich der Meinung bin, dass es ein wenig zu scharf auf Abkürzungen ist, wenn ein kurzes Wort genügen würde. (Um das Beispiel von dieser Wikipedia-Seite zu verwenden, warum
rw
für Zeile verwenden, wennrow
nur ein Zeichen länger ist? Es ist nicht so, als gäbe es einen globalen Vokalmangel.)Realistisch gesehen ist es jedoch am wichtigsten, die Konventionen der Menschen zu befolgen , mit denen Sie zusammenarbeiten . Ja wirklich. Die meisten Konventionen funktionieren gut genug, besonders wenn sie konsequent verwendet werden. Inkonsistenzen sind am schlimmsten (noch schlimmer als bei ungarischen Systemen, die ich hasse). Und wenn Sie alleine sind, verwenden Sie, was Sie wollen.
quelle
Nach dem, was ich gesehen habe, variiert es zwischen den Projekten.
Eingebettete Unterstriche werden in C unter Unix wahrscheinlich traditioneller bzw. häufiger verwendet. Darauf folgt auch die Standardbibliothek, daher sollte sie mit ziemlicher Sicherheit als Standard verwendet werden, es sei denn, es ist genügend Code vorhanden, der eine andere Konvention verwendet, um die Verwendung dieser anderen Konvention zu erzwingen.
Windows (zum Beispiel) verwendet Camel Case für die meisten seiner Funktionen, so dass nicht wenige Leute, die für Windows entwickeln, dasselbe tun. Dies ist auch ziemlich häufig bei Leuten, die wirklich an andere Sprachen gewöhnt sind und versuchen, C ++ so zu behandeln, als ob es nur eine seltsame Variante von etwas anderem wäre.
quelle
Ich habe sowohl Standardbibliothek als auch Boost als Referenz für Namenskonventionen verwendet. Es gibt jedoch ein Problem mit dieser Lösung.
In der Standardbibliothek wird eine Namenskonvention verwendet, mit der versucht wird, Kollisionen mit Ihrem Code zu reduzieren. Ein Teil der Lösung besteht darin, alle Kleinbuchstaben zu verwenden. Daher die Verwendung von Unterstrichen anstelle von camelCase.
Ich finde, dass camelCase lesbar ist. PascalCase wird häufig für Klassennamen verwendet, da es das Äquivalent eines Eigennamens darstellt. Ich werde diese Regel jedoch für Funktoren brechen, die repräsentativer für ein Verb sind.
Ich versuche keine Makros zu benutzen. Wenn ich das tue, werden Makros so erstellt, dass sie wie Funktionen aussehen, wenn sie können. Ich verwende auch const-Werte oder Aufzählungen anstelle von manifesten Konstanten, um weiterhin Großbuchstaben zu vermeiden. Normalerweise stelle ich diesen Symbolen ein "k" voran, um anzuzeigen, dass sie konstant sind.
quelle
Diese Referenz beschreibt eine Namenskonvention, die denen ziemlich ähnlich ist, die ich in mindestens drei Unternehmen, für die ich in der Vergangenheit gearbeitet habe, mit Erfolg verwendet habe.
Im Gegensatz zu einer früheren Antwort würde ich es vermeiden, die Namenskonvention der C ++ - Standardbibliothek in meinem eigenen Code zu befolgen, wenn auch nur, um Namenskollisionen mit der Standardbibliothek zu vermeiden.
Diese vorherige SO-Antwort zu einem verwandten Thema ist möglicherweise auch von Interesse: /programming/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier
quelle
std::string
vs.gnawme::string