Ich habe Argumente für und gegen Systems Hungarian gesehen . Seit einigen Jahren arbeite ich an einem Legacy-Projekt, das dieses System verwendet, indem es jede Variable benennt und mit einem Präfix des Variablentyps (z. B. strName, intAge, btnSubmit usw.) benennt (ich kenne die ursprünglichen ungarischen Apps-Präfixe anhand der Art von Variable, nicht der Typ). Ich möchte, dass mein nächstes Projekt es vollständig aufgibt, aber es fällt mir schwerer, ähnliche Dinge eindeutig zu benennen, ohne darauf zurückzugreifen.
Nehmen wir an, ich habe ein Webformular zum Sammeln und Speichern von E-Mail-Adressen in einer Datenbanktabelle und eine Schaltfläche, die die Funktion aufruft, mit der die Adresse in der Datenbank gespeichert wird.
Wenn ich die ungarische Notation verwende, kann ich das Feld txtEmail
als Schaltfläche btnEmail
und den im Textfeld enthaltenen Wert bezeichnen strEmail
. Ich könnte dann eine Funktion verwenden storeEmail(strEmail)
, um die E-Mail zu speichern. Ich habe hier eine klare Konvention, es ist offensichtlich, was jede Variable ist.
Was wäre die beste Vorgehensweise für die Benennung dieser Variablen?
- ohne auf ungarische Systeme zurückzugreifen,
- ohne sie lang oder verwirrend zu machen
- und mit einer klaren Konvention, die ich für mein gesamtes Projekt verwenden kann?
Antworten:
Ihr letzter Punkt ist der wichtigste - was auch immer Sie tun, Sie müssen in Ihrem Projekt und mit Ihren Kollegen konsistent sein. Es gibt zwei Möglichkeiten, um Konsistenz zu erreichen, und wenn möglich sollten Sie beide verwenden. Verwenden Sie zunächst ein Tool, um die Namenskonventionen beim Erstellen zu überprüfen. In der .Net-Welt wäre StyleCop ein gutes Beispiel für ein solches Tool. Die zweite Möglichkeit, Konsistenz zu erzielen, besteht darin, Peer-Reviews des gesamten Codes durchzuführen, damit Sie alle Ausschau halten können.
Ihre anderen beiden Punkte scheinen nach einer Alternative zu fragen. Ich bin mir nicht sicher, ob Sie eine Alternative brauchen. Der Punkt, dass Ungarisch nicht mehr populär ist, ist, dass es verwendet wurde, um den Typ zu beschreiben, als das Typensystem und die Werkzeuge etwas weniger streng waren. Das heißt, wenn Sie in C programmiert und Zeiger herumgereicht haben, können Sie den Typ nur mit Ungarisch verfolgen. Wenn Sie eine Sprache wie C # oder Java verwenden, werden Sie keine Zeiger verwenden (oder sehr selten), sodass die Notwendigkeit für jede Art von Ungarisch wegfällt. Mit modernen IDEs können Sie den Typ auch sehr leicht erkennen, indem Sie mit der Maus über die Variable fahren oder im schlimmsten Fall eine Verknüpfung verwenden, um die ursprüngliche Deklaration anzuzeigen. Ich glaube also nicht, dass Sie irgendeine Art von Notation benötigen, benennen Sie die Variable einfach so, wie sie funktioniert. Wenn es sich um eine E-Mail-Adresse handelt, verwenden Sie einfach "E-Mail" oder "
quelle
Wenn Sie mit Webformularen / Windows-Formularen / anderen grafischen Elementen arbeiten, ist es sinnvoll, Systems Hungarian zu verwenden, da Sie Steuerelemente haben können, die sehr eng miteinander verbunden sind, z. B. ein Textfeld und eine Beschriftung, die zusammenpassen. Sie könnten sie benennen
txtEmail
undlblEmail
unterscheiden. Nach meiner Erfahrung ist dies üblich und tatsächlich nützlich.In Ihrem Code-Behind ist diese Art der Benennung jedoch nicht erforderlich. Wenn Sie eine Variable vom Typ haben
string
, die zum Speichern einer E-Mail verwendet wird, benennen Sie sie einfachemail
. Wenn Sie aus irgendeinem Grund verwirrt sind, sollten die meisten IDEs es Ihnen ermöglichen, mit der Maus darüber zu fahren und den Typ zu sehen. (Idealerweise ist es in OO-Inhalten ein Attribut eines Objekts unduser.Email
noch deutlicher.)Ich denke, wenn in Ihrem Code mehr als ein Objekt deklariert ist, das kein GUI-Steuerelement ist, das zu Recht benannt werden könnte
email
, stimmt etwas mit Ihrem Design nicht.quelle
Was macht eine Variable "über lang"?
Anstatt
txtEmail
,btnEmail
könnten Sie verwendenUserEmailText
,UserEmailButton
undAdminEmailText
,AdminEmailButton
Das Problem dabei ist, dass Sie möglicherweise das Gefühl haben, dass die Variable langsam lang wird:
AdminEmailIsValid
beginnt zu begrenzen, wie lange ich die Variable zulassen würde.Darüber hinaus stellen Sie möglicherweise fest, dass Sie eine Reihe von Variablen und eine Reihe von Operationen für diese Variablen wiederverwenden. Dafür ist OOP konzipiert . Erstellen Sie anstelle einer Reihe von Variablen ein generisches Objekt:
Anschließend können Sie eine neue Variable als Klasse instanziieren und dieselbe Punktnotation verwenden, um auf Ihre Daten zuzugreifen:
Dies richtet sich natürlich an Sprachen, die das OOP-Paradigma verwenden, aber die meisten gängigen Webentwicklungssprachen sind objektorientiert oder ermöglichen objektorientierten Code (PHP, Python, C #, C ++, Java, JavaScript, ActionScript usw.) ).
quelle
UserEmailText
undAdminEmailText
speziell) hinzu. Normalerweise füge ich Suffix-Typen hinzu, da es sich für den Wechsel zu einer Klasse eignetUserEmailText
->UserEmail.text
->,User.email.text
je nachdem, wie viel Abstraktion / Funktionalität erforderlich ist.