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
Antworten:
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:
oder dieses:
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):Ich finde diese Version viel einfacher zu lesen:
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.
quelle
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 =)
quelle
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.
quelle
Gestützt auf eine Antwort die Antwort von John Isaacks:
Ich entschloss mich zu recherchieren und fand dieses Papier . Was sagt die Wissenschaft zu diesem Thema?
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. :)
quelle
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."
quelle
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?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.
quelle
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.
quelle
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_names
für Dienstprogrammfunktionen / "geschützte" Methoden undmethodNames
für Methoden im Java-Stil verwendet habe. Mein Team war zufrieden damit :)quelle
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:
quelle
XMLHttpRequest
<- Ich hasse diesen Namen aus Leidenschaft.Beide!
Ich entwickle viel in CakePHP und verwende entweder
CamelCase
oder$underscored_vars
auf folgende Weise (auch außerhalb von CakePHP-Projekten):/lowercased_underscored.php
Typisch, aber erwähnenswert.class CamelCase extends ParentObject
. Beachten Sie, dassCamelCase
das Anfangszeichen bei der Verwendung nicht in Kleinbuchstaben geschrieben wird. Ich findecamelCase
es wirklich komisch auszusehen .$are_variables_underscored === TRUE;
$CamelCase = new CamelCase();
$collection['underscored_keys'];
ALL_CAPS_AND_UNDERSCORED
.$CamelCase->foo_method_underscored();
CamelCase::just_like_regular_methods();
quelle
Ich persönlich bevorzuge es,
underscore_case
weil 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_case
undPascalCase
Win32-Funktionen aufgerufen :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.
quelle
Ich mag Dylans ganz normale Gedankenstriche, die einfach zu tippen und leicht zu lesen sind.
Mögen
Aber ich denke, da diese Sprache ziemlich undurchsichtig ist, ist dies eine Art Off-Topic ... :(
quelle
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.
quelle
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.
quelle
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:
Die Alternative
i2c_buffer_send
zeigt keine ausreichend große Trennung zwischen Präfix und Funktionsname.i2cBufferSend
mischt 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.
quelle
Motor1_Start()
,Motor2_Start()
,Motor1_Stop()
undMotor2_Stop()
haben eine Beziehung , die weniger klar , ohne den Unterstrichen sein könnte.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.
Wenn Sie Typen unterscheiden müssen, warum nicht eine Sprache verwenden, die sie zulässt?
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.
quelle
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
self
oder habenthis
.Aktualisieren
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:
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.
quelle
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.
quelle
Für Programmiersprachen, die ich verwendet habe, wie Java, Python, C ++, habe ich ein klares Format übernommen:
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 geschiehtobject._field_x
abhebt).quelle
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:
Drei verschiedene Stile, aber Sie wissen genau, was jeder macht.
quelle
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.
quelle
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:
myIntVariable
Wird 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.
quelle