Namenskonventionen: camelCase versus underscore_case? Was denkst du darüber? [geschlossen]


70

Ich benutze underscore_case seit ungefähr 2 Jahren und bin kürzlich wegen des neuen Jobs zu camelCase gewechselt (ich benutze den letzteren seit ungefähr 2 Monaten und denke immer noch, dass underscore_case besser für große Projekte geeignet ist, an denen eine Menge Programmierer beteiligt sind, hauptsächlich, weil der Code leichter zu lesen ist).

Jetzt benutzt jeder bei der Arbeit camelCase, weil der Code (so sagen sie) eleganter aussieht.

Was denkst du über camelCase oder underscore_case?

ps bitte entschuldige mein schlechtes englisch

Bearbeiten

Einige Updates zuerst:

  • Die verwendete Plattform ist PHP (aber ich erwarte keine strengen Antworten bezüglich der PHP-Plattform. Jeder kann seine Gedanken darüber mitteilen, welche die beste wäre. Deshalb bin ich hierher gekommen.)

  • Ich benutze camelCase genauso wie jeder andere im Team (so wie die meisten von Ihnen es empfehlen).

  • Wir verwenden Zend Framework, das auch camelCase empfiehlt

Einige Beispiele (im Zusammenhang mit PHP):

  • Das Codeigniter-Framework empfiehlt "underscore_case", und ehrlich gesagt ist der Code leichter zu lesen.

  • ZF empfiehlt camelCase und ich bin nicht der einzige, der der Meinung ist, dass ZF-Code etwas schwieriger zu befolgen ist.

Also würde meine Frage umformuliert werden:

Nehmen wir einen Fall, in dem Sie die Plattform Foo haben, die keine Namenskonventionen empfiehlt, und der Teamleiter eine auswählt. Sie sind dieser Teamleiter, warum sollten Sie sich für camelCase entscheiden oder warum underscore_case?

ps danke allen für die prompten antworten


6
"Ehrlich gesagt ist der Code leichter zu lesen" Meinung oder Tatsache?
JD Isaacks

9
Ich denke, sie sind beide gleich, aber ich denke, sie mischen sich schlecht.
Dietbuddha

7
@dietbuddha: Ich habe gerade gelesen, dass 'but_i_think_mixing_them_is_pretty_bad' viel schneller ist als 'IThinkTheyAreBothAboutTheSame'. Ich bin mir ziemlich sicher, dass dies wissenschaftlich belegt werden kann. :)
Steven Jeuris

@John Isaacks: Ich bin traurig zu berichten (als Befürworter eines Undercase), dass eine Studie zu dem Schluss kam, dass " Kamelhüllen bei allen Probanden unabhängig vom Training zu einer höheren Genauigkeit führen" .
Steven Jeuris

IWonderWhetherReadingEnglishWrittenInOneStyleVersusAnotherMakesMuchDifference. Im Endeffekt, wenn beides nicht sehr gut ist, einfach zu lesen. Es_schraubt_schrecklich_mit_Linienlänge_und_ macht_sogar_die_einfachsten_Komplikationen. Ich frage mich, ob es in der Zukunft Sprachunterstützung für angegebene Variablennamen geben soll. "Das wäre meiner Meinung nach viel sinnvoller als camelCase oder underscore_separators".
Christopher Mahan

Antworten:


84

Ich bin damit einverstanden, dass es in gewissem Maße von der Sprache abhängt, die Sie verwenden. Code sieht in der Regel besser aus, wenn Ihre Symbolnamen dem gleichen Formatierungsschema folgen wie die integrierten Sprachbibliotheken und die Standardbibliotheken.

Aber wo es eine Wahl gibt, ziehe ich Unterstriche der Kamel-Hülle vor, und zwar aus einem einfachen Grund: Ich finde, dass dieser Stil leichter zu lesen ist. Hier ist ein Beispiel: Was findest du besser lesbar? Diese:

aRatherLongSymbolName

oder dieses:

a_rather_long_symbol_name

Ich finde die Unterstrich-Version viel einfacher zu lesen. Mein Gehirn kann die Unterstrichen viel mehr ignoriert einfach , als es die Groß- / Kleinschreibung Grenzen in Kamel Fall erkennen kann, vor allem , wo die Grenzen zwischen Glyphen, die auf andere Glyphen des anderen Falles ähnlich aussehen, oder Ziffern ( I/l, O/0, t/I, usw.). Diese boolesche Variable speichert beispielsweise einen Wert, der angibt, ob ein Iglu mit der richtigen Planungsberechtigung erstellt wurde oder nicht (zweifellos ein für uns alle üblicher Anwendungsfall):

isIllicitIgloo

Ich finde diese Version viel einfacher zu lesen:

is_illicit_igloo

Vielleicht noch schlimmer als ein schwer lesbarer Symbolname ist ein leicht zu verstehender Symbolname. Gute Symbolnamen sind selbstdokumentierend, was für mich bedeutet, dass Sie sie auf einen Blick lesen und ihre Bedeutung verstehen sollten. (Ich bin mir sicher, dass wir alle zum Vergnügen Codeausdrucke im Bett lesen, aber gelegentlich haben wir es auch eilig.) Bei Kamelkastensymbolnamen stelle ich häufig fest, dass es leicht ist, sie falsch zu lesen und den falschen Eindruck von einem zu bekommen Semantik des Symbols.


25
Ein Problem mit Unterstrichen: Benutzerfreundlichkeit. Bei den meisten (europäischen) Tastaturen müssen Sie zum Eingeben des Unterstrichs die UMSCHALTTASTE gedrückt halten. Sie müssen dies auch für camelCase tun, aber ich kann die UMSCHALTTASTE mit dem kleinen Finger bequem gedrückt halten und einen beliebigen Buchstaben eingeben - aber da sich die Unterstrichen-Taste direkt neben der UMSCHALTTASTE befindet, ist das gleichzeitige Drücken beider Tasten ziemlich umständlich und unterbricht die Eingabe Fluss der Eingabe.
LearnCocos2D

11
Bei der ersten habe ich festgestellt, dass camelCase einfacher zu lesen ist - obwohl letztere offensichtlich anders ist.
Phoshi

19
Dies hängt in der Tat davon ab, was Sie gewohnt sind. Ich finde camelCases easyToRead und außerdem sind sie kürzer als gleichwertige Unterstriche.
Joonas Pulakka

17
Ich hasse es, Unterstriche zu schreiben.
EpsilonVector

6
Der Punkt "Usability" spielt dabei keine Rolle. Code wird normalerweise nur einmal von einer Person geschrieben, aber sagen wir in der Größenordnung von 1-10, was einige Bearbeitungen und potenzielle Paarprogrammierungen berücksichtigt. Code wird jedoch in der Regel Dutzend-, Hundert- und Tausendmal von einer oder möglicherweise vielen Personen gelesen. Daher ist das einfache Lesen von Code um einige Größenordnungen wichtiger als das einfache Schreiben von Code.
hlovdal

97

Ich denke, Sie sollten die Namenskonvention verwenden, die von Ihrer Plattform übernommen wurde. underscore_case sieht im C # -Code seltsam aus, wie camelCase in Ruby =)


23
Konsistenz ist ein Schlüssel. Unabhängig davon, ob Sie mit der örtlichen Konvention einverstanden sind oder nicht, Sie werden Ihre eigene Zeit (und die aller anderen) dadurch erleichtern, dass Sie konsequent sind. (Es sei denn, die lokale Konvention selbst ist inkonsistent.) Die Lesbarkeit ist meistens ein falsches Argument: Lesen Sie ausreichend Code, wenn Sie keinen Unterschied feststellen, es sei denn, Sie entscheiden, dass er nicht lesbar ist.
Richard

1
Stimme voll zu. Ich denke nur, dass es besser ist, Plattformkonventionen anstelle von benutzerdefinierten zu verwenden, da sich beispielsweise neue Mitarbeiter im Team damit wohler fühlen.
Alexey Anufriyev

2
Aber wehe denen von uns, die auf zwei Plattformen mit zwei Konventionen arbeiten, wobei einige die eine vorziehen und andere die andere vorziehen!
Michael K

Wenn die Plattform zwei Konventionen hat, würde ich alle Teammitglieder bitten, für die Konvention zu stimmen, mit der sie sich wohlfühlen =)
Alexey Anufriyev

20

Ganz ehrlich, es spielt keine Rolle, solange alle im Team dasselbe Schema verwenden. Die Chancen stehen gut, dass das eine oder andere für Sie natürlicher ist, auch wenn die Lesbarkeit von Code auf lange Sicht von entscheidender Bedeutung ist und es dann entscheidend ist, dass alle dieselben Namensregeln einhalten.


Sie haben vollkommen recht, aber ich versuche herauszufinden, welche Meinung die Leute zu Hexe haben (sagen wir für das gesamte Team), und warum ... während ich verstehe, dass manche Leute möglicherweise nur an eine Konvention gewöhnt sind oder andere heilen natürlicher mit dem anderen.
Poelinca

20

Gestützt auf eine Antwort die Antwort von John Isaacks:

"Ehrlich gesagt ist der Code leichter zu lesen" Meinung oder Tatsache?

Ich entschloss mich zu recherchieren und fand dieses Papier . Was sagt die Wissenschaft zu diesem Thema?

  1. Kamelhülle hat eine größere Wahrscheinlichkeit der Richtigkeit als Unterstriche. (Wahrscheinlichkeiten sind 51.5% höher)
  2. Im Durchschnitt dauerte der Kamelfall 0,42 Sekunden länger , was 13,5% länger ist.
  3. Das Training hat keinen statistisch signifikanten Einfluss darauf, wie der Stil die Korrektheit beeinflusst.
  4. Diejenigen mit mehr Training waren schneller in Bezug auf Identifikatoren im Kamelfallstil.
  5. Das Training in einem Stil wirkt sich negativ auf die Auffindungszeit für andere Stile aus.

In meinem Blogbeitrag zum Thema überprüfe ich das wissenschaftliche Papier und komme zu folgendem Schluss.

Nur die Langsamkeit des Kamelkastens (2) ist für die Programmierung wirklich relevant. Die anderen Punkte werden aufgrund moderner IDEs und der Mehrheit der CamelCase-Benutzer in der Studie als irrelevant eingestuft. Die Diskussion (zusammen mit einer Umfrage) finden Sie im Blog-Beitrag.

Ich bin gespannt, wie dieser Artikel die Meinung ändern könnte. :)


3
Natürlich verwerfen Sie alle anderen Punkte wegen Ihrer Präferenz für Unterstriche und die anderen Punkte helfen Ihrem Fall nicht ...
Charles Boyung

2
@Charles: Ja und nein, IMHO, ich mache gute Argumente, warum sie abzulehnen sind, und einige von ihnen werden sogar von der Zeitung selbst als problematisch erörtert. In einem Folgepapier werden einige der Probleme dieses Papiers untersucht , und die Ergebnisse sind pro-unterstrichen.
Steven Jeuris

11

Kopieren Sie die klügsten Jungs

Kopieren Sie bei Programmiersprachen den Stil des Entwicklers der Sprache.

Zum Beispiel codiere ich C genau so, wie es in K & R gemacht wird.

Wenn dann jemand versucht, eine langweilige Unterhaltung über den Codierstil zu beginnen, kann ich ihm sagen: "Bring das mit Dennis Ritche auf den Punkt und lass mich wissen, was er sagt."


12
Das Original ist nicht immer das Beste. Es gibt viele schlechte Praktiken im K & R-Evangelium über C. Bevor dies zu einem Flammenkrieg führt ... lesen Sie einige der MISRA-Empfehlungen.
quick_now

10
Vergiss nicht, K & R wurde geschrieben, als es keine GUI-IDEs gab. Die meisten Arbeiten wurden an Terminals mit 80 x 25 Zeichen ausgeführt, sodass der Platz auf dem Bildschirm knapp war und if (...) {eine Zeile gespart wurde! Heutzutage gibt es mehr Platz auf dem Bildschirm - wäre K & R anders, wenn es heute mit hochauflösenden GUI-IDEs und mehreren Monitoreinstellungen geschrieben würde?
Skizz

3
Ja, aber wenn jemand sagt, dass er C wie K & R codiert, bekommt er Requisiten dafür, dass er Old School ist.
Christopher Mahan

3
@quickly_now, bring das mit Dennis Ritchie auf den Punkt und lass mich wissen, was er sagt!
Mark Harrison

Ich übernehme viele Formatierungen von MS: _internalToClassOnly, accessibleByGetter, PublicVariable.
IAbstrakter

10

Im Allgemeinen bevorzuge ich camelCase. Das liegt jedoch daran, dass ich die meiste Zeit meiner Karriere in Sprachen und Umgebungen gearbeitet habe, in denen die Styleguides normalerweise camelCase empfehlen. (Java, ECMAScript, C ++). Als PHP-Benutzer haben Sie wahrscheinlich die gegenteilige Präferenz.

Das heißt, wenn Sie über threeOrFourWords hinausgehen oder Initialismen wie XmlForExample verwenden, ist es nicht mehr so ​​lesbar.

Deshalb gibt uns der Emacs einen Brillenmodus.


2
+1 dafür, dass ich den Brillenmodus entdeckt habe! Ich habe es gerade an einer Codedatei getestet, die camelCase verwendet, und festgestellt, dass es sofort besser aussieht (Zusammenbau mit vielen Etiketten in camelCase).
Gauthier

Okay, was ist Brillenmodus?
Marcie


8

camelCase

Dies ist einer der wenigen Orte, an denen ich immer "Schreibfähigkeit" vor "Lesbarkeit" wählen werde. CamelCase ist nur einfacher zu tippen, und wenn ich besser mit den Fingern umgehen kann, ist das für mich ein Gewinn an Lesbarkeit.

vorausgesetzt natürlich, dass das Projekt nicht auf einer bestehenden Codebasis mit einem anderen Standard aufbaut.


Ich bin damit nicht einverstanden, Sie schreiben Code nur einmal, aber Sie müssen ihn danach mehrmals lesen
Roman Pekar

7

Das ist eine interessante Frage, über die ich schon oft nachgedacht habe. Aber ich denke, es gibt keine eindeutige Antwort.

Nach den "kulturellen" Konventionen ist es eine gute Wahl. "Kulturell" bedeutet in diesem Fall Konventionen, die im Team / Unternehmen eingerichtet wurden, und sie tragen im Wesentlichen auch die Konventionen für Sprache / Plattform. Es hilft anderen, Ihren Code leicht zu lesen / zu verwenden, und erfordert keinen zusätzlichen Aufwand und keine Zeit, um sich mit dem Verstehen Ihres Codes vertraut zu machen.

Manchmal ist es interessant, akzeptierte Notationen zu brechen. Eines meiner kleinen Projekte (auf Python), das ich underscored_namesfür Dienstprogrammfunktionen / "geschützte" Methoden und methodNamesfür Methoden im Java-Stil verwendet habe. Mein Team war zufrieden damit :)


6

Kommt auf die Programmiersprache an.

Ich überlege, den Fall im selben Boot zu verwenden, um zu entscheiden, ob die ungarische Notation verwendet werden soll oder nicht:

  • Python: Unterstrich, keine ungarische Schreibweise
  • C ++: camelCase, ungarische Notation

8
@ Kevin Cantu: Eigentlich ist der Name Javascript in PascalCase eher als camelCase ...
Guffa

1
@ Guffa: touché!
Kevin Cantu

2
@ Kevin Cantu: auf JavaScript: XMLHttpRequest<- Ich hasse diesen Namen aus Leidenschaft.
Thanatos

1
hypotheticalReasonsToNukeRedmond.push (XMLHttpRequest)
Kevin Cantu

4
@Lionel: Tatsächlich wird die ungarische Notation in C ++ so gut wie nie verwendet, da C ++ bereits Ihre Typen überprüft. Es ist mehr ein historisches Artefakt als alles andere.
In silico

6

Beide!

Ich entwickle viel in CakePHP und verwende entweder CamelCaseoder $underscored_varsauf folgende Weise (auch außerhalb von CakePHP-Projekten):

  1. Dateinamen - /lowercased_underscored.phpTypisch, aber erwähnenswert.
  2. Klassen - class CamelCase extends ParentObject. Beachten Sie, dass CamelCasedas Anfangszeichen bei der Verwendung nicht in Kleinbuchstaben geschrieben wird. Ich finde camelCasees wirklich komisch auszusehen .
  3. Variablen -$are_variables_underscored === TRUE;
  4. Variablen, die Instanzen enthalten -$CamelCase = new CamelCase();
  5. Array-Schlüssel -$collection['underscored_keys'];
  6. Konstanten - Ich denke, jeder kann zustimmen, dass Konstanten sein sollten ALL_CAPS_AND_UNDERSCORED.
  7. Methoden -$CamelCase->foo_method_underscored();
  8. statische Methoden -CamelCase::just_like_regular_methods();

3
Ich muss dir zustimmen, dass der erste Buchstabe in Kleinbuchstaben geschrieben ist, macht mich verrückt! Ich hasse camelCase aus Leidenschaft.
HLGEM

In Java, wo Namen normalerweise in Kamelform geschrieben werden, beginnen die Klassennamen tatsächlich mit einem Großbuchstaben. Dies dient zur Unterscheidung von Methodennamen.
James P.

5

Ich persönlich bevorzuge es, underscore_caseweil ich es besser lesbar finde, aber ich stimme den anderen Antwortenden zu, die darauf hinweisen, dass die Konsistenz mit der vorhandenen Codebasis viel wichtiger ist.

Ich habe jedoch ein Gegenbeispiel für diejenigen, die sagen "Befolgen Sie die Konvention Ihrer Sprache und ihrer Bibliotheken".

In der Vergangenheit haben wir C-Code unter Windows geschrieben underscore_caseund PascalCaseWin32-Funktionen aufgerufen :

if (one_of_our_conditions_is_true())
{
    call_one_of_our_functions();
    CallSystemFunction();
}

Die visuelle Unterscheidung zwischen unseren Funktionsnamen und den Funktionsnamen von Microsoft war eher hilfreich als hinderlich, wie deutlich gezeigt wurde, als der Code in das "Systemland" ging.

Außerdem konnte ich die Syntax-Hervorhebungsregeln meines Editors ändern, um sie in verschiedenen Farben anzuzeigen, was weitere visuelle Hinweise gab, wenn ich versuchte, unbekannte Codeabschnitte (oder sogar meine eigenen) zu verstehen.


5

Ich mag Dylans ganz normale Gedankenstriche, die einfach zu tippen und leicht zu lesen sind.

Mögen

result-code := write-buffer(file-stream, some-string)

Aber ich denke, da diese Sprache ziemlich undurchsichtig ist, ist dies eine Art Off-Topic ... :(


3
Ich bin auch müde, die Umschalttaste zu drücken, um Unterstriche zu tippen.
Gauthier

8
Bei Variablennamen ist dies in der Regel nicht möglich, da "-" in der Regel Minus bedeutet.
Eric Wilson

4

Mir wurde an der Universität beigebracht, camelCase zu benutzen. Ich habe in den letzten Jahren ein paar verschiedene Konventionen verwendet, bevorzuge aber camelCase gegenüber allem anderen. Ich erinnere mich, dass ich irgendwo gelesen habe, dass camelCase eigentlich am einfachsten zu lesen und zu verstehen ist.


4
Nun, es ist nicht einfacher, weil Sie irgendwo lesen, es ist einfacher, weil es das erste war, mit dem Sie gearbeitet haben, und hauptsächlich, weil Sie es gewohnter sind, zum Beispiel, weil ich mich mit Underscore_Case wohler fühle.
Poelinca

1
Wie in Ich habe gelesen, dass eine Studie durchgeführt wurde und fand es besser ..
Ross

4

Wie die meisten Leute erwähnt haben - Verwenden Sie den vorhandenen Standard. Wenn es sich um ein neues Projekt handelt, verwenden Sie den Standard für die Sprache und die Frameworks, die Sie verwenden werden.

Und lassen Sie sich nicht verwirren, es geht nicht um Lesbarkeit (was subjektiv ist), sondern darum, konsequent und professionell zu sein. Jeder, der in einer Codebasis mit zahlreichen "Standards" gearbeitet hat, wird verstehen.


4

Ich benutze manchmal eine Mischung: module_FunctionName. Alle (nicht statischen) Funktionen in meinen Modulen beginnen mit einem Modulkürzel.

Zum Beispiel eine Funktion zum Senden des Inhalts eines Puffers auf dem I2C-Bus:

i2c_BufferSend()

Die Alternative i2c_buffer_sendzeigt keine ausreichend große Trennung zwischen Präfix und Funktionsname. i2cBufferSendmischt zu viel im Präfix (es gibt eine ganze Reihe von I2C-Funktionen in diesem Modul).

i2c_Buffer_send könnte jedoch eine Alternative gewesen sein.

Meine Antwort ist, dass Sie sich an das anpassen, was für Ihr Projekt am besten geeignet ist (Ihre Sprache, Ihre SW-Architektur, ...), und ich möchte darauf hinweisen, dass das Mischen dieser Stile nützlich sein kann.

myGeneralOpinionIsThatNamesAreMuchHarderToReadInCamelCase. Ich respektiere die Tatsache, dass einige nicht wirklich verstehen, warum.


1
+1 für die letzten 2 Zeilen, aber ich empfehle nicht, dass Sie Namenskonventionen kombinieren, sollten Sie bei der einen oder anderen bleiben.
Poelinca

Solange die Konvention gut definiert ist (Präfix + Unterstrich + PascalCase) ...
Gauthier

Ich mag es, Unterstriche zu verwenden, um Teile eines Namens zu trennen, die semantisch disjunkt sind, besonders wenn Gemeinsamkeiten in einer der beiden Hälften von Bedeutung sein können. Zum Beispiel können die Routinen Motor1_Start(), Motor2_Start(), Motor1_Stop()und Motor2_Stop()haben eine Beziehung , die weniger klar , ohne den Unterstrichen sein könnte.
Supercat

4

Persönlich bevorzuge ich camelCase, aber in einigen Schriftarten sind Unterstriche meiner Meinung nach leichter zu lesen.

Ich würde vorschlagen, dass Sie, wenn Sie Präfixe zur Unterscheidung von Variablensätzen verwenden müssen, eine Sprache verwenden sollten, mit der Sie Namespaces oder Objekte oder etwas anderes erstellen können, in dem diese Informationen gespeichert sind.

myName   = 7
bobsName = 8   // :(

me.name  = 7
bob.name = 8   // :D

Wenn Sie Typen unterscheiden müssen, warum nicht eine Sprache verwenden, die sie zulässt?

var intThingy = 7; // :(

int thingy = 7;    // :)

Sobald Sie das klargestellt haben und den Namen nicht nur als Metadaten verwenden, werden Sie nicht genügend lange Namen haben, sodass es sehr wichtig ist, ob Sie diesen zusätzlichen Tastendruck bevorzugen oder nicht.


1
Einer der Gründe für die Verwendung von camelCase oder underscore_case ist, dass ich die Objektdefinition nicht finden muss, um zu erkennen, um was es sich handelt.
Joshua Shane Liberman

2

Zuerst stimme ich dafmetal zu. Es ist von größter Wichtigkeit, dass Sie keine unterschiedlichen Programmierstile mischen. Dies in ein und derselben Datei zu tun, ist das Schlimmste, was Sie IMHO tun können. Über verschiedene Dateien hinweg lenkt es ab, ist aber nicht schwerwiegend.

Das nächste, was Sie tun müssen, ist, Regeln zu benennen, die für die Sprache, in der Sie schreiben, beliebt sind. Mein C ++ - Code für instnace sieht offensichtlich anders aus als etwas für Python (PEP8 ist hier eine nette Anleitung).

Sie können auch unterschiedliche Namenskonventionen verwenden, um auf verschiedene Dinge zu verweisen, so wie Sie UPPER_CASE wahrscheinlich für Konstanten verwenden (dies gilt natürlich nur für bestimmte Sprachen). Sie können this_style für lokale Variablennamen verwenden, während Sie camelCase für instance / member verwenden Variablen. Dies ist möglicherweise nicht erforderlich, wenn Sie Dinge wie selfoder haben this.

Aktualisieren

Nehmen wir einen Fall, in dem Sie die Plattform haben, auf der Foo keine Namenskonventionen empfiehlt und der Teamleiter eine auswählt. Sie sind dieser Teamleiter, warum sollten Sie sich für camelCase entscheiden oder warum underscore_case.

Es gibt wirklich keine Vorteile für das eine gegenüber dem anderen. Diese Angelegenheit ist sehr subjektiv und wird, wenn sie einmal vereinbart ist, keinen Unterschied machen. Es gibt immer diese religiösen Kriege um diese kleinen Dinge. Aber wenn Sie sich erst einmal daran gewöhnt haben, scheinen die Diskussionen völlig überflüssig zu sein.

Um Alex Martelli zu einer sehr ähnlichen Angelegenheit zu zitieren:

Klar, ich werde es müde, in Ruby das alberne "Ende" am Ende eines jeden Blocks einzugeben (anstatt es nur einzugrenzen) - aber dann vermeide ich es, das alberne ":" einzugeben, das Python verlangt der Anfang jedes Blocks, das ist fast eine Wäsche :-). Andere Syntaxunterschiede wie '@foo' gegenüber 'self.foo' oder die höhere Bedeutung der Groß- / Kleinschreibung in Ruby vs Python sind für mich eigentlich genauso irrelevant.

Andere stützen ihre Wahl der Programmiersprachen zweifellos auf solche Themen und führen die heißesten Debatten - aber für mich ist dies nur ein Beispiel für eines der in Kraft getretenen Parkinson-Gesetze ( die Höhe der Debatten zu einem Thema ist umgekehrt proportional zu den Themen tatsächliche Bedeutung ).

Quelle

Wenn Sie der Teamleiter sind, nehmen Sie einfach einen mit. Da das eine keine Vorteile gegenüber dem anderen hat, kann man einfach würfeln oder auswählen, was man mehr mag.


2

Ich habe vor einigen Jahren gelesen, dass Programmierer, die kein Englisch als Muttersprache sprechen, den Unterstrich leichter verstehen als den Kamelfall - aber ich kann den Verweis nicht finden, und ich habe keine Ahnung, ob er wahr ist.


2

Für Programmiersprachen, die ich verwendet habe, wie Java, Python, C ++, habe ich ein klares Format übernommen:

  • ClassNamesArePascalCase
  • methodNamesAreCamalCase
  • variable_names_are_underscore
  • CONSTANT_VARIABLES_ARE_CAPITAL_VARIABLES

Dadurch kann ich sofort erkennen, womit ich es zu tun habe. Ich habe festgestellt, dass dies nützlich ist, um mich selbst zu pflegen, und es sollte für andere, die den Code lesen, einfach zu befolgen sein. Ich denke, wie andere erwähnt haben, ist Konsistenz am wichtigsten. Daher finde ich mein Format so einfach, dass es beibehalten werden kann, und gleichzeitig eine klare Unterscheidung zwischen den Namenstypen. Ich könnte mir interface_Names_Are_Like_This und Abstract_Classes_Are_Like_This als mögliche Erweiterungen vorstellen, aber es scheint komplizierter zu sein, dem zu folgen, und es ist vielleicht nicht so nützlich, eine Unterscheidung zu treffen.

Ich fand es auch nützlich, streng zu sein und Dinge in PascalCase wie einen HTML-Parser als HtmlParser anstelle von HTMLParser oder HTMLparser zu bezeichnen. Weil ich glaube, dass es einfacher ist, sich an die strengen Regeln zu erinnern und die Wortgrenzen klarer zu halten (leider sind Rechtschreibfehler wie HTML oder SQL erforderlich). Ähnlich verhält es sich mit camelCase, htmlParserMethod anstelle von HTMLParserMethod oder HTMLparserMethod.

UPDATE :

Ich habe seitdem Verwendung beim Erweitern dieser Regeln gefunden, um private Variablen einzuschließen. - _private_variable_names_are_prefixed_with_an_underscore - _PRIVATE_CONSTANT_VARIABLES_ARE_PREFIXED_WITH_AN_UNDERSCORE

In Java bedeutet dies, dass sich private Felder per Definition in einem anderen Namespace befinden als lokale Variablen. Sie können also die this.privaten Felder überspringen . Andere Formate Ich habe ein Präfix mit " m" gesehen, aber diese Formate verwenden auch camelCase für die Variablennamen. Dies ermöglicht es mir auch eine Unterscheidung zwischen den Feldern zu machen , die nur intern von der Klasse zugegriffen werden soll (und macht es Super klar , wenn es außerhalb der Klasse geschieht object._field_xabhebt).


1

Wenn es nach mir ginge, würde ich die Verwendung eines bestimmten Stils nicht erzwingen oder andeuten, da wir als Programmierer in der Lage wären, ein Symbol IfItIsInCamelCase oder in_underscore_space oder sogar in_SomeOtherStyle zu lesen und zu verstehen, was es bedeutet. Das Analysieren des Symbols erfordert nur einen geringen Zeitaufwand. Dies ist im großen Schema der Dinge kein großer Aufwand.

Das Hauptargument für eine Konvention ist, dass Sie das Format eines Funktions- / Variablennamens im Voraus kennen und nicht nachschlagen müssen - sind es LoadXMLFile, loadXMLFile, LoadXmlFile, load_xml_file? Jetzt würde ich diesem Argument mit den Worten "Holen Sie sich eine IDE, die die automatische Vervollständigung im Intellisense-Stil unterstützt!" (aber nicht immer möglich).

Letztendlich spielt es jedoch keine Rolle, welchen Stil Sie verwenden, da es den Compiler / Interpreter nicht wirklich interessiert. Wichtig ist, dass der Name nützlich ist:

NumberOfPrisonersReleasedByAccident
manufacturer_name
distance_EarthToMoon

Drei verschiedene Stile, aber Sie wissen genau, was jeder macht.


1
Ich bin anderer Meinung, das Aussehen der Quelle ist wichtig. Siehe "The pragmatic programmer" 's broken windows theory. Unterschiedliche Namenskonventionen verschlechtern das Erscheinungsbild. pragprog.com/the-pragmatic-programmer/extracts/software-entropy
Gauthier

1
@Gauthier: Obwohl ich der Idee eines "kaputten Fensters" zustimme, halte ich die Großschreibung von Symbolen nicht für ein "kaputtes Fenster". Zufällig angelegter Code ist es auf jeden Fall, und mein aktuelles Projekt hat sicherlich eine Menge von dem, was ich aufzuräumen versuche, wann immer ich kann.
Skizz

Genau. Ich kann alle drei gleich gut lesen. Es spielt keine Rolle. Ich verwende nur, was auch immer die Datei verwendet, dann was auch immer die Sprache vorschlägt (Python) und dann, was auch immer ich denke, das Projekt wird am besten bedient. (Früher habe ich in gwbasic programmiert, und es waren alles Großbuchstaben - die guten alten Zeiten!)
Christopher Mahan

0

Mag albern erscheinen, aber ich mag keine Unterstriche, weil der Unterstrich dünn ist und sich in mehrzeiligem Text verbirgt, und ich vermisse ihn. Wenn Sie in einigen (vielen) Texteditoren und / oder Entwicklungsumgebungen auf einen Tokennamen doppelklicken, um ihn hervorzuheben, um ihn zu kopieren oder zu ziehen und abzulegen, wird nicht das gesamte Token hervorgehoben, sondern nur ein Teil des Tokens zwischen benachbarten Unterstrichen. Das macht mich verrückt.


0

Ich bevorzuge camelCase aus dem albernen Grund, dass ich den größten Teil meiner Entwicklung in Eclipse (für Java, PHP und JavaScript) mache und wenn ich Ctrl+ oder Ctrl+ durch Worte gehe, stoppt es tatsächlich an den Grenzen von camelCase.

Dh: myIntVariableWird von Eclipse als 3 Wörter Ctrl+ behandelt, wenn ← →es durchgeht.

Ich weiß, dass es eine seltsame Eigenart ist, aber ich bevorzuge es, die mittleren Wörter in einem camelCase-Namen zu bearbeiten.

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.