In Welche Benennungsrichtlinien befolgen Sie? sagt der Autor:
Außerdem bevorzuge ich es, ungarische Notation von Charles Simonyi zu verwenden.
Ich habe einige Programmierer kennengelernt, die immer noch lieber Ungarisch verwenden, hauptsächlich mit dem ungarischen Petzold / Systems-Geschmack. Denken Sie nach dwLength = strlen(lpszName)
.
Ich habe " Falschen Code falsch aussehen lassen" gelesen und die Gründe für Apps Hungarian verstanden, bei denen domänentypische Informationen in den Variablennamen enthalten sind. Aber ich verstehe den Wert nicht, wenn ich den Compilertyp an den Namen anpasse.
Warum verwenden Programmierer diesen Notationsstil immer noch? Ist es nur Trägheit? Gibt es irgendwelche Vorteile, die die verminderte Lesbarkeit aufwiegen? Lernen die Leute nur, die Dekorateure zu ignorieren, wenn sie den Code lesen, und wenn ja, wie setzen sie ihre Wertschöpfung fort?
BEARBEITEN: Viele Antworten erklären die Geschichte oder warum sie nicht mehr relevant sind. Beides wird in dem von mir zitierten Artikel behandelt.
Ich würde wirklich gerne von jemandem da draußen hören, der es noch benutzt. Warum benutzt du es? Ist es in deinem Standard? Würden Sie es verwenden, wenn es nicht erforderlich wäre? Würden Sie es für ein neues Projekt verwenden? Was sehen Sie als die Vorteile?
quelle
Antworten:
Im Moment benutze ich immer noch Ungarisch aus genau drei Gründen , um es für alles andere vernünftig zu vermeiden :
Ich würde meine Ideen sicherlich nicht als Best Practice etablieren wollen, aber ich befolge diese Regeln, da mir die Erfahrung zeigt, dass die gelegentliche Verwendung des ungarischen Vorteilscodes zwar wartbar ist, aber wenig kostet. Das heißt, ich überprüfe ständig meine eigene Praxis, kann also etwas anderes tun, wenn sich meine Ideen entwickeln.
Aktualisieren:
Ich habe gerade einen aufschlussreichen Artikel von Eric Lippert gelesen , in dem erklärt wird, wie Ungarisch dazu beitragen kann, dass falscher Code falsch aussieht. Gut lesenswert.
quelle
tssb
oder eintsddi
? Ja, sie existieren). Abkürzungen haben auch das Problem der Homogenität. Dabei kannTextBox
es zu Inkonsistenzen kommen, ob dies der Fall isttb
odertxt
(ich persönlich habe gesehen, dass ein "älterer" Entwickler beide in einem einzigen Fenster verwendet). Für 3 lösche ich das Ungarische, wenn die Variable ihren endgültigen beabsichtigten Typ erreicht (z. B. würde ichvalue
undstrValue
in Ihrem Beispiel verwenden).Ich bin kein großer Fan der ungarischen Notation, aber denke so:
Kein Bild vom Gegenteil, bei dem jedes Element einen eigenen Namen hat. Es könnte für Sie langsamer sein, zu finden, wohin Sie wollen, oder?
Dasselbe gilt für ddl, wenn wir auf eine DropDownList verweisen möchten. Ist das einfacher oder nicht? :)
Die Leute verbringen nicht so viel Zeit damit, herauszufinden, wo sich dieses Element befindet.
Die Verwendung des Präfixes ist für moderne Sprachen-Compiler wie C # nicht verwendbar, aber für Menschen verwendbar (lesbar) .
quelle
Apps Hungarian (Tags zur Bezeichnung der semantischen Eigenschaften von Objekten, die nicht durch das Typensystem ausgedrückt werden können) war eine vernünftige Methode, um mit einigen häufigen Fehlern umzugehen, wenn man die schwach typisierten Sprachen der frühen 1980er Jahre verwendete. Sie haben in den heutigen stark typisierten Sprachen wenig Sinn.
Ungarische Systeme (Tags, mit denen der deklarierte Typ eines Objekts redundant bezeichnet wird) haben nie einen Zweck erfüllt, außer einer Codebasis ein oberflächlich einheitliches Erscheinungsbild aufzuerlegen. Es wurde von nicht-technischen Managern und unerfahrenen Programmierern erstellt und verbreitet, die die Absicht von Apps Hungarian missverstanden haben und der Ansicht waren, dass die Codequalität durch komplexe Codierungsrichtlinien verbessert werden könnte.
Beide Stile stammen von Microsoft. In diesen Tagen lauten die Namenskonventionen von Microsoft kategorisch "Verwenden Sie keine ungarische Notation."
quelle
Wenn Sie sich das richtige Präfix-System einfallen lassen, können Sie die Abnutzung Ihrer Tasten verteilen und so die Ausgaben für Ersatztastaturen senken.
Ich nehme an, ich könnte das erweitern. Ich habe SH in den letzten zehn Jahren an meinem Arbeitsplatz verwendet (weil es in unserem Standard enthalten ist). Es hat noch nie geholfen, ein Problem zu lösen.
Andererseits habe ich fast genauso lange schmucklose, aber gut benannte Variablen in meinem 'Home-Code' verwendet. Ich habe SH noch nie verpasst.
An beiden Stellen habe ich Protokollcode geschrieben, der primitive Typen mit fester Größe erfordert. Dies ist der günstigste Anwendungsfall für SH. Es hat nicht geholfen, dass ich mit SH schreiben kann, und es hat mich nicht behindert, wenn ich ohne SH schreibe.
Zusammenfassend ist der einzige Unterschied, den ich feststellen kann, die Abnutzung Ihrer Tastatur.
quelle
Ich habe tatsächlich angefangen, SH in neuem Code zu verwenden, den ich diesen Monat geschrieben habe.
Meine Aufgabe bestand darin, etwas Perl-Code in JS neu zu schreiben, damit er auf die Clientseite unserer Webanwendung verschoben werden konnte. In Perl wird SH im Allgemeinen aufgrund von Siegeln ($ string, @array,% hash) nicht benötigt.
In JavaScript stellte ich fest, dass SH von unschätzbarem Wert ist, um die Arten von Datenstrukturen zu verfolgen. Beispielsweise,
Dies ruft ein Objekt aus einem Array von Objekten unter Verwendung eines Ganzzahlindex ab. Das Einhalten dieser Konvention ersparte mir einige Zeit beim Nachschlagen von Datentypen. Außerdem können Sie prägnante Variablennamen (
oRow
vs.iRow
) überladen .tl; dr: SH kann großartig sein, wenn Sie komplexen Code in einer schwach getippten Sprache haben. Aber wenn Ihre IDE Typen verfolgen kann, ziehen Sie das vor.
quelle
Ich bin auch gespannt auf die Gründe. Wir wissen, warum sie es in der Vergangenheit verwendet haben: Fehlende IDE-Unterstützung für Typinformationen. Aber jetzt? Einfach gesagt, ich denke, es ist eine Tradition. C ++ - Code sah immer so aus. Warum also etwas ändern? Außerdem, wenn Sie auf dem vorherigen Code aufbauen, der die ungarische Notation verwendet, würde es ziemlich seltsam aussehen, wenn Sie plötzlich damit aufhören ...
quelle
Die ungarische Systemnotation war in der Tat ein bisschen verrückt, ein Missverständnis des Begriffs "Typ". Die Systementwickler haben es wörtlich als Compiler-Typ (Wort, Byte, Zeichenfolge, ...) und nicht als Apps-Domänentyp (Zeilenindex, Spaltenindex, ...) verstanden.
Aber ich vermute, dass jeder Entwickler mehrere Stilphasen durchläuft, die zu der Zeit eine großartige Idee zu sein scheinen (und das Präfixieren des Typs scheint für Anfänger eine gute Idee zu sein), bevor er in die Fallstricke gerät (den Typ wechseln, neue, aussagekräftige Präfixe erstellen, etc). Ich denke, es gibt eine Trägheit: von Entwicklern, die nicht besser werden und erkennen, warum es eine schlechte Wahl ist, von Entwicklern, die sich an Kodierungsstandards halten, die die Praxis vorschreiben, und von Anwendern
<windows.h>
. Es wäre für Microsoft zu kostspielig, Änderungen vorzunehmen, um die Präfixnotation zu entfernen (die vielerorts falsch ist: WPARAM?).quelle
Es gibt eine Sache, die die Leute mit Ungarisch vermissen. Die ungarische Notation funktioniert mit Autocomplete sehr gut.
Angenommen, Sie haben eine Variable und der Name lautet intHeightOfMonster.
Angenommen, Sie haben den Namen der Variablen vergessen
Es könnte heightOfMonster oder MonsterHeight oder MeasurementMonsterHeight sein
Sie möchten in der Lage sein, einen Buchstaben einzugeben und sich von der automatischen Vervollständigung einige Variablennamen vorschlagen zu lassen.
Da Sie wissen, dass heightOfMonster ein Int ist, geben Sie einfach i und voila ein.
Zeit sparen.
quelle