Gibt es eine Entschuldigung für kurze Variablennamen?

140

Dies ist eine große Enttäuschung über die Codebasis, in der ich gerade arbeite. Viele unserer Variablennamen sind kurz und nicht aussagekräftig. Ich bin der einzige Entwickler, der noch am Projekt beteiligt ist, und es gibt keine Dokumentation darüber, was die meisten von ihnen tun. Daher muss ich zusätzliche Zeit aufwenden, um herauszufinden, was sie darstellen.

Ich habe zum Beispiel einen Code gelesen, der die Definition einer optischen Oberfläche aktualisiert. Die am Anfang gesetzten Variablen waren wie folgt:

double dR, dCV, dK, dDin, dDout, dRin, dRout
dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1));
dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1));
... and so on

Vielleicht bin es nur ich, aber es sagte mir im Wesentlichen nichts darüber, was sie darstellten, was das Verständnis des Codes weiter unten schwierig machte. Ich wusste nur, dass es sich um eine Variable handelte, die irgendwo eine bestimmte Zeile aus einer bestimmten Tabelle auswertete. Nach einigem Suchen fand ich heraus, was sie bedeuteten:

dR = radius
dCV = curvature
dK = conic constant
dDin = inner aperture
dDout = outer aperture
dRin = inner radius
dRout = outer radius

Ich habe sie im Wesentlichen in das umbenannt, was ich dort oben habe. Es verlängert einige Zeilen, aber ich denke, das ist ein fairer Handel. Diese Art von Benennungsschema wird jedoch in einem Großteil des Codes verwendet. Ich bin mir nicht sicher, ob es ein Artefakt von Entwicklern ist, die durch die Arbeit mit älteren Systemen gelernt haben, oder ob es einen tieferen Grund dafür gibt. Gibt es einen guten Grund, Variablen so zu benennen, oder bin ich berechtigt, sie auf aussagekräftigere Namen zu aktualisieren, wenn ich auf sie stoße?

KChaloux
quelle
98
Mir scheint, dass es sich in diesem speziellen Fall um Variablennamen handelt, die direkt aus einer mathematischen Langhandformel kopiert wurden.
Dave Nay
1
die einzige Entschuldigung , die ich akzeptieren würde wäre „My Peer gesagt , es ist OK , nachdem Sie den Code Überprüfung“
gnat
35
Wenn Sie aufgrund kurzer Variablennamen keinen mathematischen Code verstehen können, beachten Sie, dass dies möglicherweise daran liegt, dass Sie die Mathematik nicht verstehen und nicht daran, dass die Namen zu kurz sind. Das Ändern von mathematischen Ausdrücken, die Sie nicht verstehen, ist kein Prozess mit hoher Zuverlässigkeit. Sobald Sie die Mathematik verstanden haben, spielt die Länge der Variablennamen keine Rolle mehr. Tun Sie anderen einen Gefallen und zitieren Sie (in einem Kommentar) eine relevante Beschreibung der Mathematik, wenn Sie sie lernen mussten!
Rex Kerr
3
Jede Kennung , die nach Donkey Kong genannt wird genehmigt: dK = conic constant.
Thomas Eding
8
Umgekehrt könnte man sich fragen, ob die Unkenntnis des Domänenfeldes die Nichtbeachtung seiner Konventionen rechtfertigt. Am Ende kommt es auf den Kontext an.
Daniel C. Sobral

Antworten:

234

Es scheint, dass diese Variablennamen auf den Abkürzungen basieren, die in einem Physiklehrbuch zu finden sind, in dem verschiedene optische Probleme behandelt werden. Dies ist eine der Situationen, in denen kurze Variablennamen häufig längeren Variablennamen vorgezogen werden. Wenn Sie Physiker haben (oder Leute, die es gewohnt sind, die Gleichungen von Hand zu erarbeiten), die gewohnt sind, gebräuchliche Abkürzungen wie Rin, Rout usw. zu verwenden, ist der Code mit diesen Abkürzungen viel klarer als mit längeren Variablennamen. Es macht es auch viel einfacher, Formeln aus Papieren und Lehrbüchern mit Code zu vergleichen, um sicherzustellen, dass der Code die Berechnungen tatsächlich ordnungsgemäß ausführt.

Jeder, der mit Optik vertraut ist, erkennt sofort etwas wie Rin als inneren Radius (in einem Physikpapier inwürde das als Index wiedergegeben), Rout als äußeren Radius usw. Obwohl sie mit ziemlicher Sicherheit in der Lage wären, etwas mental zu übersetzen Wie innerRadiusbei der bekannteren Nomenklatur würde dies den Code für diese Person weniger klar machen. Dies würde es schwieriger machen, Fälle zu erkennen, in denen eine vertraute Formel falsch codiert wurde, und es würde schwieriger machen, Gleichungen im Code in und aus den Gleichungen zu übersetzen, die sie in einer Arbeit oder einem Lehrbuch finden würden.

Wenn Sie die einzige Person sind, die sich jemals mit diesem Code befasst, müssen Sie niemals zwischen dem Code und einer Standardoptikgleichung übersetzen, und es ist unwahrscheinlich, dass ein Physiker in Zukunft jemals einen Blick auf den Code werfen muss, was möglicherweise der Fall ist Eine Umgestaltung ist sinnvoll, da der Nutzen der Abkürzungen die Kosten nicht mehr überwiegt. Wenn dies jedoch eine Neuentwicklung wäre, wäre es mit ziemlicher Sicherheit sinnvoll, die gleichen Abkürzungen im Code zu verwenden, die Sie in der Literatur finden würden.

Justin Cave
quelle
17
Und wenn es keine Physiker oder Mathematiker gibt? Der Code wurde im Wesentlichen mir überlassen. Es ist weitgehend undokumentiert. Wäre es mehr schwierig , die beschreibenden Namen zu lesen?
KChaloux
127
+1 Es ist nicht unvernünftig zu erwarten, dass ein Programmierer die Domäne versteht, in der er arbeitet. Andererseits werden die Variablen in mathematischen Arbeiten normalerweise an einer geeigneten Stelle definiert. In Code wie diesem würde ich einen prominenten Kommentar erwarten, der die lange Form zeigt.
Karl Bielefeldt
15
+1: Sie sagen im Grunde, dass ein Programmierer, der die Domäne versteht, in der er arbeitet, die Variablennamen versteht. Dies wird in vielen Projekten auch bei längeren Variablennamen der Fall sein. z.B. Eine Variable, die columnin einem militärischen Strategiespiel genannt wird, bedeutet höchstwahrscheinlich etwas anderes als in einer Kartensoftware.
Steven Evers
23
In der medizinischen Programmierung finden Sie häufig Begriffe, die in der Programmiersphäre bestehen bleiben. Bei der Ophthalmologie sehen Sie beispielsweise OU, OD und OS. Diese bezeichnen, welches Auge, zum Beispiel, ouSphere, die Kugelkomponente einer Brillenverordnung für das rechte Auge referenzieren kann. Sie sind ein besserer Programmierer, wenn Sie die Geschäftsdomäne verstehen, für die Sie programmieren.
Bill
11
+1 für die Feststellung, dass Kurznamen mit denen in Gleichungen und Formeln aus Beiträgen und Texten übereinstimmen. Wenn ich das mache, füge ich die Kommentare hinzu, wo sich das ursprüngliche Referenzmaterial befindet.
Jay Elston
89

Variablen mit kurzer Lebensdauer sollten kurz benannt werden. Zum Beispiel schreibst du nicht for(int arrayCounter = 0; arrayCounter < 10; arrayCounter++) { .... Stattdessen verwenden Sie for(int i ....

Generell kann man sagen, dass der Name umso kürzer sein sollte, je kürzer der Gültigkeitsbereich der Variablen ist. Schleifenzähler sind oft nur einzelne Buchstaben, sagen wir i, jund k. Lokale Variablen sind so etwas wie baseoder fromund to. Globale Variablen sind dann zum Beispiel etwas aufwendiger EntityTablePointer.

Vielleicht wird eine Regel wie diese bei der Codebasis, mit der Sie arbeiten, nicht befolgt. Es ist jedoch ein guter Grund für ein Refactoring!

zxcdw
quelle
14
i, j und k für Array-Indizes stellen eine Tradition dar, die zumindest auf Fortran zurückgeht. Jeder sich selbst respektierende Programmierer ist mit dieser Konvention vertraut.
Dominic Cronin
7
Ich in der Regel nicht schreiben i, j, k, ich schreibe so etwas wie personPosdenn dann werde ich nicht vergessen , was ich Iterieren und was der Index.
Malcolm
18
-1, ich verwende lange Namen für Array-Index-Iterationen, aber ich gebe ihnen einen aussagekräftigen Namen anstatt eines offensichtlichen und sinnlosen arrayCounter . Erleichtert das Lesen des Codes und erspart Ihnen zumindest das Stapfen des gesamten äußeren Zählers, wenn Sie eine weitere Schleife in diese kopieren / einfügen.
Oleg V. Volkov
3
counter ist ein Substantiv oder ein Adjektiv. Count ist ein Substantiv oder ein Verb. Natürlich würde ich noch nicht etwas nennen arrayCounter, würde ich benutzen personIndexoder rowoder was auch immer beschrieben wird, was ich suche.
Wayne Werner
6
Wenn ich eine einzelne Schleife mache, benutze ich i. Sobald ich jedoch zu einer verschachtelten Schleife übergehe, lasse ich die iNomenklatur fallen. Der Grund dafür ist, dass ich wirklich nachverfolgen möchte, mit welcher Schleifenvariablen gearbeitet wird, und dass ivs jin dichtem Code ziemlich irreführend sein kann. Die Lesbarkeit zu verbessern und mehr Leerzeichen hinzuzufügen, ist für mich von Natur aus notwendig.
Jcolebrand
48

Das Problem mit dem Code sind nicht die Kurznamen, sondern das Fehlen eines Kommentars, der die Abkürzungen erklären oder auf hilfreiche Materialien zu den Formeln verweisen würde, aus denen die Variablen abgeleitet werden.

Der Code setzt lediglich die Vertrautheit mit der Problemdomäne voraus.

Das ist in Ordnung, da eine Vertrautheit mit der Problemdomäne wahrscheinlich erforderlich ist, um den Code zu verstehen und zu pflegen, insbesondere in der Rolle einer Person, die ihn "besitzt".

Aber es wäre schön, wenn der Code einige Hinweise geben würde, die als Sprungbretter dienen könnten. Sogar ein Domain-Experte könnte vergessen, dass dies dKeine Kegelkonstante ist. Das Hinzufügen eines kleinen "Spickzettel" in einem Kommentarblock würde nicht schaden.

Kaz
quelle
Letztendlich ging es so.
KChaloux
5
Das ist falsch. Es gibt keinen Grund, Ihren Code schwer lesbar zu machen, um die Leute dazu zu zwingen, mehr Zeit damit zu verbringen, ihn zu "lernen". Du unterrichtest nicht, du verlangsamst nur die Leute. Außerdem gibt es praktisch nie einen einzigen Eigentümer von Code für immer. Du bist kurzsichtig und egoistisch.
Xaxxon
7
Es ist Ihre Interpretation, die falsch ist, nicht die Antwort. Der Code implementiert eine Mathematik, die außerhalb und unabhängig von diesem Code existiert und vor dem Code steht. Die gleiche Benennung beizubehalten ist hilfreich. Jemand, der den Code verwaltet, muss das wahrscheinlich außerhalb der Mathematik lernen, und wenn er nicht zwischen zwei Benennungsschemata mappen muss, hilft das dieser Person.
Kaz
19

Für bestimmte Variablen, die im Problembereich bekannt sind - wie hier - sind knappe Variablennamen sinnvoll. Wenn ich an einem Spiel arbeite, möchte ich, dass meine Spieleinheiten Positionsvariablen xund y, nicht horizontalPositionund haben verticalPosition. Ebenso Schleifenzähler, die keine Semantik über Indizierung haben, erwarte ich , um zu sehen i, j, k.

Russell Borogove
quelle
Ich würde argumentieren, dass Lebenslauf, Lärm und Lärm nicht sofort offensichtlich sind (obwohl sie anscheinend in bestimmten Bereichen etabliert sind). Ich würde nicht über x und y streiten, da kartesische Koordinaten für eine beliebige Anzahl von Feldern gelten und jedem in der Mittel- und Oberschule beigebracht werden.
KChaloux
1
Und xund y, während gemeinsame, tragen keine implizite wichtige Aspekte wie , wo der Ursprung in.
Ross Patterson
3
@ RossPatterson: Es gibt jedoch viele Kontexte, in denen das einfach nicht wichtig ist. Betrachten Sie zum Beispiel eine Schleife wie for (x,y) in list_of_coordinates: print x,y: Der Ursprung spielt keine besondere Rolle, wenn Sie versuchen, den Code zu verstehen.
Bryan Oakley
16

Nach "Clean Code":

Variablennamen sollten:

  • Seien Sie aufschlussreich
  • Vermeiden Sie Fehlinformationen
  • Machen Sie sinnvolle Unterscheidungen
  • Aussprechbar sein
  • Sei durchsuchbar

Ausnahmen sind die sprichwörtlichen i,j,k,m,nfor-Schleifen.

Die Variablennamen, über die Sie sich zu Recht beschweren, haben nichts mit dem oben Gesagten zu tun. Diese Namen sind schlechte Namen.

Da jede Methode kurz sein muss , wird die Verwendung von Präfixen zur Angabe von Gültigkeitsbereich oder Typ nicht mehr verwendet.

Diese Namen sind besser:

radius
curvature
conicConstant
innerAperture
outerAperture
innerRadius
outerRadius

Ein Kommentator sagt, dass dies mit langen Variablennamen zu komplex wäre:

Bildbeschreibung hier eingeben

Kurze Variablennamen machen es auch nicht einfach:

fnZR = (r^2/fnR(1+Math.sqrt((1+k) * (r^2/R^2)))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;

Die Antwort sind lange Namen und Zwischenergebnisse, bis Sie diese am Ende erhalten:

thisNiceThing =  ( thisOKThing / thisGreatThing ) + thisAwsomeThing;
user61852
quelle
26
Diese Variablen werden wahrscheinlich in mathematischen Formeln im Code verwendet. Mathematische Formeln sind mit kurzen Variablennamen viel einfacher zu lesen. Ich benutze lange Variablennamen in meinem Code, aber Mathematik ist besser mit kurzen Variablennamen. Zufälliges Beispiel: Überlegen Sie, wie lange dies bei langen Variablennamen dauern würde.
MarkJ
@MarkJ Du hast recht.
Tulains Córdova
1
Zwischenergebnisse haben den zusätzlichen Vorteil, Programmierfehler zu reduzieren und zu isolieren. Unser Gehirn kann nur Prozess so viele Informationen auf einmal, und es ist schwierig , den Fehler in so etwas wie zu beschmutzenfnZR = (r^2/fnR(1+Math.sqrt((1+k)) * (r^2/R^2))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;
eyelidlessness
1
Es ist nicht so schwer, wenn das dein Brot ist.
Radu
1
Es geht nicht darum, einen Einzeiler zu schreiben. Das Problem ist jedoch, dass Sie, wenn Sie etwas ändern und eine andere Formel verwenden müssen, ein Problem haben, bei dem es lange dauert, herauszufinden, worauf sich long_namedas Rim Lehrbuch bezieht. Verwenden Sie Zwischenergebnisse, aber halten Sie Ihre komplexen Berechnungen so nah wie möglich an der Problemdomäne, damit Sie sie tatsächlich beibehalten können, wenn Sie eine Funktion hinzufügen müssen.
Slebetman
8

Es gibt zwei gute Gründe, Variablen im Legacy-Code nicht umzubenennen.

(1) Wenn Sie kein automatisiertes Refactoring-Tool verwenden, ist die Wahrscheinlichkeit groß, dass Fehler auftreten. Also, "wenn es nicht kaputt ist, repariere es nicht"

(2) Sie werden den Vergleich aktueller Versionen mit früheren Versionen vornehmen, um festzustellen, was sich geändert hat. Dies erschwert die zukünftige Pflege des Codes.

ddyer
quelle
7
Absolut richtig, aber das Risiko von Unverständnis ist viel größer.
Ross Patterson
2
Sie haben viel größere Probleme, wenn Ihre Werkzeuge einfache Probleme wie die von Ihnen erwähnten nicht bewältigen können.
AndSoYouCode
Antworten (1) Angemessene automatisierte Testabdeckung und einwandfreie Kapselung, (2) Kenntnisse in der Versionskontrolle.
Adamantish
5

Gibt es einen guten Grund, Variablen so zu benennen, oder bin ich berechtigt, sie auf aussagekräftigere Namen zu aktualisieren, wenn ich auf sie stoße?

Der Grund für die Verwendung kleinerer Namen liegt darin, dass der ursprüngliche Programmierer die Arbeit mit ihnen erleichtert. Vermutlich haben sie das Recht, dies festzustellen, und das Recht, nicht die persönlichen Vorlieben zu haben, die Sie haben. Persönlich würde ich finden ...

dDin better than dDinnerAperture
dDout better than dDouterAperture

... wenn ich sie in langen, komplexen Berechnungen verwenden würde. Je kleiner der mathematische Ausdruck, desto einfacher ist es oft, das Ganze auf einmal zu sehen. Wäre dies der Fall, wären sie möglicherweise besser als dIn und dOut, sodass es kein sich wiederholendes D gab, das zu einem leichten Tippfehler führen könnte.

Wenn es Ihnen hingegen schwerer fällt, damit zu arbeiten, können Sie sich selbst aus dem Staub schlagen und dann in ihre längere Form umbenennen. Vor allem, wenn Sie für diesen Code verantwortlich sind.

GroßmeisterB
quelle
7
Zumindest werde ich die ungarische
Systemnotation
4
Die Führung dist ungarisch? Ich dachte, es sei ein Kalkül wie in dx^2/dx = 2x.
Shannon Severance
7
Wenn ich es dDinnerAperturealleine sehen würde, würde ich es als "Dinner Aperture" lesen und mich fragen, ob es nur eine lustige Art ist, "deinen Mund" zu sagen. Ich war noch nie ein Fan des Großbuchstabens (gefolgt von Kleinbuchstaben). Manchmal sehr verwirrend.
Darrel Hoffman
2
+1 das ist die Antwort. Lange mathematische Formeln sind mit kurzen Variablennamen viel einfacher zu lesen. Diese Variablen werden wahrscheinlich in mathematischen Formeln im Code verwendet. Mathematische Formeln sind mit kurzen Variablennamen viel einfacher zu lesen. Ich benutze lange Variablennamen in meinem Code, aber Mathematik ist besser mit kurzen Variablennamen. Zufälliges Beispiel: Überlegen Sie, wie lange dies bei langen Variablennamen dauern würde.
MarkJ
1
@ ShannonSeverance Ich stimme dir zu. Aus dem Ingenieurwesen kommend, sollte d bei der Verwendung von Variablennamen im mathematischen Sinne (wie hier häufig erwähnt) unbedingt der Analysis vorbehalten sein.
CodeMonkey
4

Ich bin der Meinung, dass die Regel dafür sein sollte, dass Sie extrem kurze Variablennamen verwenden können, wenn Sie wissen, dass Leute, die auf dem Gebiet Ihres speziellen Codes "erfahren" sind, die Referenz dieses Variablennamens sofort verstehen. (Sie haben ohnehin immer Kommentare für die Ausnahme dieses Falls), und dass die lokalisierte Verwendung der Variablen anhand des Kontextes ihrer Verwendung leicht erkannt werden kann.

Um dies zu erweitern, bedeutet dies, dass Sie sich nicht die Mühe machen sollten, Ihre Variablennamen zu verschleiern. Sie können jedoch Abkürzungen für Ihre Variablennamen verwenden, wenn Sie wissen, dass nur Personen wahrscheinlich sind, die das zugrunde liegende Konzept Ihres Codes verstehen es trotzdem zu lesen.

Um ein Beispiel aus der Praxis zu verwenden, habe ich kürzlich eine Javascript-Klasse erstellt, die einen gewissen Spielraum einnimmt und Ihnen die Menge an Sonnenlicht angibt, die Sie an einem bestimmten Datum erwarten würden.

Um diese Sonnenuhrklasse zu erstellen , habe ich auf ein halbes Dutzend Ressourcen, den Astronomie-Almanach und Ausschnitte aus anderen Sprachen (PHP, Java, C usw.) Bezug genommen.

In fast allen verwendeten sie ähnliche identische Abkürzungen, die auf den ersten Blick absolut nichts bedeuten.

K, T, EPS, deltaPsi, eot, LM,RA

Wenn Sie jedoch Kenntnisse in Physik haben, können Sie verstehen, was sie waren. Ich würde nicht erwarten, dass jemand anderen diesen Code berührt. Warum also ausführliche Variablennamen verwenden?

julianTime, nutationOfEclipticalLongitudeExpressedInDegrees, equationOfTime, longitudeMean, rightAscension.

Außerdem ist es häufig nicht sinnvoll, eine ausführliche Version zu verwenden, wenn Variablennamen vergänglich sind, dh wenn sie nur zur vorübergehenden Zuweisung von Werten verwendet werden, insbesondere wenn der Kontext der Variablen nicht eindeutig ist erklärt den Zweck.

Laykes
quelle
1

Es gibt absolut; Oft genügt ein kurzer Variablenname.

In meinem Fall mache ich die Wegpunktnavigation in meiner Robotikklasse und wir programmieren unsere Roboter in KISS-C. Wir benötigen Variablen für aktuelle und Zielkoordinaten (x, y), (x, y) Abstände, aktuelle und Zielüberschriften sowie Drehwinkel.

Insbesondere bei x- und y-Koordinaten ist ein langer Variablenname völlig unnötig, und Namen wie xC (aktuelles x), yD (Ziel y) und pD (Ziel phi) sind ausreichend und am einfachsten zu verstehen in diesem Fall.

Sie könnten argumentieren, dass dies keine 'beschreibenden Variablennamen' sind, wie es das Programmiererprotokoll vorschreibt, aber da die Namen auf einem einfachen Code basieren (d = Ziel, c = aktuell), ist ein sehr einfacher Kommentar zu Beginn die ganze Beschreibung Sie benötigen.

George Gorski
quelle
0

Gibt es einen guten Grund, Variablen so zu benennen, oder bin ich berechtigt, sie auf aussagekräftigere Namen zu aktualisieren, wenn ich auf sie stoße?

In der Regel werden komplexe Algorithmen in matlab (oder einer ähnlichen Sprache) implementiert. Was ich gesehen habe, sind Leute, die nur den Variablennamen übernehmen. Auf diese Weise ist es einfach, Implementierungen zu vergleichen.

Alle anderen Antworten sind fast richtig. Diese Abkürzungen sind in Mathematik und Physik zu finden, mit der Ausnahme, dass sie nicht mit d(wie in Ihrem Beispiel) beginnen. Variablen, die mit d beginnen, werden normalerweise zur Darstellung der Differenzierung benannt .

In allen normalen Codierungsanleitungen wird empfohlen, keine Variablen mit dem ersten Buchstaben zu benennen, der den Typ darstellt (wie in Ihrem Fall), da es in allen modernen IDEs so einfach ist, den Code zu durchsuchen.

BЈовић
quelle
Richtig, dieses Element verschwand, unabhängig davon, was die Leute am Ende sagten. In der Codebasis, die ich aktualisiere, ist eine Art von halb-ungarischer halb-nicht-Schizophrenie im Gange.
KChaloux
0

Ich kann mir einen Grund vorstellen, warum Variablennamen ziemlich kurz sind.

Die Kurznamen sind leicht zu lesen, wenn der Abstand zwischen den Augen und damit die Aufmerksamkeit verringert wird.

Wenn ich mich zum Beispiel an die Tatsache gewöhnt habe, dass svdb "In der Datenbank speichern" bedeutet, verbessert sich die Scanrate des Quellcodes, da ich nur noch 4 Zeichen schnell scannen muss, anstatt SaveToDatabase (14 Zeichen) zu lesen für komplexere Operationsnamen). Ich sage "Scannen" statt "Lesen", da dies einen großen Teil der Analyse des Quellcodes ausmacht.

Beim Durchsuchen einer großen Menge an Quellcode kann dies zu einer guten Leistungssteigerung führen.

Außerdem hilft es dem faulen Programmierer nur, diese Kurznamen beim Schreiben von Code einzugeben.

Natürlich ist zu erwarten, dass alle diese "Shorthands" an einer Standardposition im Quellcode aufgeführt sind.

Amol
quelle
1
Wir lesen Wörter nicht als eine Reihe von Zeichen, sondern als Formen und lösen Details bedingt auf, wenn das Verständnis auf einen Blick fehlschlägt. Die Länge eines Wortes, die zum Lesen länger benötigt wird, ist viel größer als 4 Zeichen, und wir können camelCase und andere Methoden zum Aufbrechen von Wörtern mit variablen Namen als Wortgrenzen mental verarbeiten. Ich bezweifle, dass ein Lesetest die Behauptung aufstellen würde, dass kürzere Namen das Leseverständnis beschleunigen. Stattdessen wird durch Entfernen erkennbarer Wörter die Geschwindigkeit verringert, bis die neuen Wörter assimiliert sind (worauf Sie selbst hinweisen).
Augenlidlosigkeit
0

Um das, was @zxcdw gesagt hat, auf eine etwas andere Art und Weise zu fassen und es in Bezug auf die Herangehensweise zu erläutern:

Funktionen sollten rein , kurz und eine perfekte Verkapselung mancher Funktionalitäten: Black - Box - Logik für 40 Jahre , ob es gesessen unberührt, unabhängig davon, wird es weiterhin die Arbeit tun es für entworfen wurde, weil seine Schnittstelle (in und out) ist Ton, auch wenn Sie nichts über seine Interna wissen.

Dies ist die Art von Code, die Sie schreiben möchten: Dies ist Code, der Bestand hat und einfach zu portieren ist.

Verfassen Sie bei Bedarf Funktionen aus anderen (Inline-) Funktionsaufrufen , um den Code feinkörnig zu halten.

Mit einem entsprechend beschreibenden Funktionsnamen (wenn nötig ausführlich!) Minimieren wir jetzt die Wahrscheinlichkeit einer Fehlinterpretation dieser verkürzten Variablennamen, da der Gültigkeitsbereich so klein ist.

Arcane Engineer
quelle
-1

Variablennamen sollten so beschreibend wie möglich sein, um die Lesbarkeit des Programms zu verbessern. Sie haben es selbst erlebt: Sie hatten große Probleme zu identifizieren, was das Programm aufgrund der schlechten Benennung tat.

Es gibt keinen guten Grund, keinen aussagekräftigen Namen zu verwenden. Es wird Ihnen und allen anderen, die an dem Projekt arbeiten, helfen. Eigentlich gibt es eine einzige gültige Verwendung für Kurznamen: Schleifenzähler.

marco-fiset
quelle
6
Beachten Sie, dass dies int dummy_variable_for_for_loops;so beschreibend wie möglich ist.
Kaz
4
-1, weil diese Antwort verwirrend ist. Zuerst heißt es, dass es keine guten Gründe gibt, dann heißt es abschließend, dass es tatsächlich Gründe gibt. Die Antwort wäre besser, wenn es umformuliert würde, sich nicht zu widersprechen.
Bryan Oakley
Ich würde das so ändern, dass es "so beschreibend wie nötig " ist. Wenn ein Kurzname den Zweck der Variablen wiedergibt, ist es in Ordnung, einen Kurznamen zu verwenden .
Maximus Minimus
-1

Sicher ist das, wofür // Kommentare sind?

Wenn die Aufgaben Kommentare enthalten, die beschreibend sind, erhalten Sie das Beste aus beiden Welten: Eine Beschreibung der Variablen und aller Gleichungen ist leicht mit ihrem Lehrbuchgegenstück vergleichbar.

Richie
quelle
-1

Bei Interfaces (zB Methodensignaturen, Funktionssignaturen) löse ich dies in der Regel durch Annotieren der Parameterdeklarationen. Für C / C ++ werden sowohl die .h-Datei als auch der Code der Implementierung verziert.

Ich mache dasselbe für Variablendeklarationen, bei denen die Kenntnis der Verwendung der Variablen im Kontext und in der Benennung nicht offensichtlich ist. (Dies gilt auch für Sprachen, die keine gute Schreibweise haben.)

Es gibt viele Dinge, die den Variablennamen nicht verstopfen sollen. Ist der Winkel in Bogenmaß oder Grad, gibt es eine gewisse Toleranz für die Genauigkeit oder den Bereich usw. Die Informationen können wertvolle Aussagen über Eigenschaften liefern, die korrekt behandelt werden müssen.

Ich bin nicht religiös. Ich bin einfach nur an Klarheit interessiert und daran sicherzustellen, dass ich jetzt, was es ist, das nächste Mal, wenn mein vergessliches Ich den Code besucht. Und jeder, der über meine Schulter schaut, hat das, was er wissen muss, um zu sehen, wo etwas nicht stimmt, was wichtig ist (das letzte Kriterium für eine ordnungsgemäße Wartung).

orcmid
quelle
-1

Gibt es eine Entschuldigung für zu kurze Variablennamen?

Erstens: Die Benennung einer Variablen für Energie e bei der Berechnung von Formeln wie E = MC2 ist NICHT zu kurz. Die Verwendung von Symbolen als Argument für Kurznamen ist ungültig

Diese Frage war für mich ziemlich interessant, und ich kann mir nur eine Ausrede vorstellen, und das ist Geld.

Angenommen, Sie verdrahten Javascript für einen Client, der weiß, dass die Datei viele Male pro Sekunde heruntergeladen werden muss . Es wäre billiger und würde die Erfahrung der Benutzer verbessern, wenn die Datei (in Anzahl von Bytes) so klein wie möglich wäre.

(Um das Beispiel „realistisch“ zu halten, durften Sie kein Minifier-Tool verwenden. Warum? Sicherheitsprobleme, keine externen Tools, die die Codebasis berühren dürfen.)

AlexanderBrevig
quelle
1
Ihr Beispiel ist immer noch nicht sehr realistisch.
Radu
-1

Ich stelle fest, dass in den anderen Antworten die Verwendung der ungarischen Notation nicht erwähnt wird. Dies ist orthogonal zur Längendebatte, aber relevant für Benennungsschemata im Allgemeinen.

double dR, dCV, dK, dDin, dDout, dRin, dRout

Das "d" am Anfang all dieser Variablen soll anzeigen, dass es sich um Doppelvariablen handelt. aber die Sprache erzwingt dies trotzdem. Trotz der Kürze dieser Namen sind sie zu 50% überflüssig !

Wenn wir eine Namenskonvention verwenden, um Fehler zu reduzieren, ist es besser, Informationen zu codieren, die nicht von der Sprache geprüft werden. Zum Beispiel wird sich dK + dRim obigen Code keine Sprache beschweren , obwohl es sinnlos ist, einer Länge eine dimensionslose Zahl hinzuzufügen.

Eine gute Möglichkeit, solche Fehler zu vermeiden, besteht darin, stärkere Typen zu verwenden. Wenn wir jedoch Doubles verwenden wollen, könnte ein geeigneteres Benennungsschema sein:

// Dimensions:
// l  = length
// rl = reciprocal length
double lR, rlCV, K, lDin, lDout, lRin, lRout

Die Sprache erlaubt uns weiterhin zu schreiben K + lR, aber jetzt geben uns die Namen einen Hinweis, dass dies falsch sein könnte.

Dies ist der Unterschied zwischen ungarischen Systemen (im Allgemeinen schlecht) und ungarischen Apps (möglicherweise gut).

http://en.wikipedia.org/wiki/Hungarian_notation

Warbo
quelle
1
Tatsächlich kann sich C ++ beschweren, K + lR wenn Sie Ihre Einheiten ordnungsgemäß deklarieren. Mit SI-Einheiten können Dimensionsprüfungen und Einheitenumrechnungen durchgeführt werden. Das Hinzufügen 3_feet + 2_metersollte kein Problem sein, während 2_meter+1_secondein Fehler bei der Kompilierung auftreten sollte.
MSalters
@MSalters Das ist ziemlich cool; Ein Template / Makro-Ansatz war mir nicht eingefallen. Trotzdem würde ich in einer "sprachunabhängigen" Frage wie dieser alle Überprüfungen zur Kompilierungszeit unter dem Dach "Stärkere Typen" zusammenfassen, unabhängig davon, ob die Sprache sie "Typen" nennt oder nicht;)
Warbo
Vorlage, unbedingt. Sie können die erforderliche Typberechnung in Makros nicht ausführen.
MSalters
-2

Der einzige Fall, in dem unleserlich kurze Variablennamen in der modernen Softwareentwicklung akzeptabel sind, liegt vor, wenn sie in einem Skript vorhanden sind und der Durchsatz dieses Skripts (im Allgemeinen über ein Netzwerk) wichtig ist. Behalten Sie auch dann das Skript mit langen Namen in der Quellcodeverwaltung bei und minimieren Sie das Skript in der Produktion.

Telastyn
quelle
9
Was ist mit mathematischen Operationen, bei denen die Begriffe in der Domäne als allgemein bekannt gelten? Beispiel: Verwenden von M anstelle von "Masse" in e = mc ^ 2
Andy Hunt
2
@andyBursh - da wäre ich vorsichtig. Programmierer sind nicht oft Experten (oder sogar kompetent) in ihrem Problembereich. Das heißt, diese Art von Dingen kann in Ordnung sein, besonders wenn es den entsprechenden Kommentarlink zu der fraglichen Formel gibt; Ich hatte dieses Szenario vergessen.
Telastyn 20.11.12
8
@Telastyn - Wenn Sie jedoch davon ausgehen, dass der Programmierer kein Experte ist, führt dies häufig dazu, dass Abkürzungen mit einer sehr genau definierten Bedeutung in längere Namen umgewandelt werden, die zumindest etwas mehrdeutig sind (dh jemand beschließt, eine lokale Variable zu benennen radiuswenn es den inneren Radius nicht versteht, ist das viel mehrdeutiger als Rin). Und dann muss der Entwickler, der kein Experte ist, zwischen seiner eindeutigen Nomenklatur und der Nomenklatur, die das Unternehmen bei jeder Diskussion über Gleichungen versteht, übersetzen.
Justin Cave
2
Was ist mit "i" für einen Schleifenzähler? Oder "x" und "y" beim Umgang mit einer Koordinate? Oder eine Variable, deren Gültigkeitsbereich nur aus zwei Codezeilen besteht?
Bryan Oakley
4
Stimme dieser Antwort nicht zu. Ein Programmierer, der an einem Programm mit komplexen mathematischen Ausdrücken arbeitet, sollte besser in der Lage sein, die Formeln in der Spezifikation zu lesen , da er sonst nicht kompetent ist. Das ist kein Problemdomänenwissen, das ist eine wesentliche Fähigkeit - einige grundlegende Mathematikkompetenzen, bevor Sie an einem mathematischen Programm arbeiten. Wenn der Programmierer keinen Zugriff auf die Spezifikationsformeln hat, ist dies ein weiteres Problem - und es kann nicht allein durch Kommentare gelöst werden.
MarkJ