Wie benennen Sie Konstruktorargument- und Elementvariablen?

7

Ich benutze kein Präfix, wenn ich interne Variablen einer Klasse benenne (ich weiß, dass einige das tun, aber ich fange nicht an "warum sprichst du ..."). Ich bevorzuge es einfach so. Das Problem ist, dass manchmal dieselben Parameter im Contructor übergeben werden und ich verwirrt bin, wie ich sie benennen soll. Zum Beispiel:

%Vor%

Wie nenne ich XclassIdX und XclassNameX?

Eine Sache, die wahrscheinlich getan werden kann, ist:

%Vor%

Nur nicht sicher, ob das eine gute Idee ist oder es andere elgante Wege gibt?

    
Hemant 20.03.2009, 12:29
quelle

8 Antworten

17

Ich denke, die Lösung, die Sie beschreiben, wo die Konstruktorparameter identisch benannt sind und Sie den Klassenmitgliedern this voranstellen, ist in Ordnung. Es ist klar, es ist kurz und es gibt keine Verwirrung darüber, was du meintest.

    
John Feminella 20.03.2009, 12:31
quelle
4

Ich verwende einfach den this -Ansatz; dann spiegeln alle meine Variablen und Felder ihre Absicht wider. Mach das X Ding nicht - das ist einfach hässlich ;-p

    
Marc Gravell 20.03.2009 12:32
quelle
3

Ich mag solche Fälle, ich glaube nicht, dass irgendein Weg besser ist als jeder andere. Aber im Interesse anderer Leute, die Ihren Code (und Sie selbst) pflegen müssen, würde ich sagen, wählen Sie einfach einen Weg, dies zu tun und konsistent zu sein.

    
Eric Petroelje 20.03.2009 12:33
quelle
1

Kurze Antwort:

Geben Sie Mitglieder und Parameter mit " m_ " und " p_ " oder " s_ " an, wenn das Mitglied statisch ist.

Dekorieren Sie Eigenschaften oder Einheimische nicht, und wenn Sie das Gefühl haben, dass Sie sie gleich benennen müssen (Groß- / Kleinschreibung ignorieren), beheben Sie den Konflikt, indem Sie Eigenschaften mit "this" voranstellen. ".

Erklärung:

Beachten Sie, dass es mindestens vier (4) verschiedene Kategorien lesbarer / zuweisbarer Namen gibt, die unterschieden werden müssen: Lokale Variablen , Mitgliedsvariablen (Instanz und statisch), < stark> Eigenschaften und Methode Parameter . Alle vier Kategorien können in einem einzigen Codeblock erscheinen, und daher benötigen sie jeweils eindeutige Unterscheidungsmerkmale.

Ein aussagekräftiges Präfix kann gleichzeitig die Variablen und unterscheiden, wie z. B. m_ (member), s_ (static), p_ (Parameter). Öffentliche Eigenschaften und lokale Variablen bleiben einfach ohne Präfixe und ohne sich um die Groß- / Kleinschreibung zu kümmern. Wenn Sie aus irgendeinem Grund eine lokale Eigenschaft als Eigenschaft ohne Berücksichtigung der Groß- / Kleinschreibung benennen müssen, fügen Sie der Eigenschaft einfach "this" voran.

Benennungskonflikte zwischen Lokale Variablen und Parameter treten nicht auf, weil sie nicht dasselbe benannt werden können (der Compiler fängt die doppelte Definition ab). Dasselbe gilt für Mitgliedsvariablen und Eigenschaften . Parameter und Member mit dem Präfix "p_" bzw. "m_" stehen nicht in Konflikt, und Konflikte zwischen nicht vordefinierten Locals und Eigenschaften können durch Hinzufügen von "this" behoben werden. zu den Eigenschaften.

Die Alternativen zu meinen Vorschlägen sind nicht schön: Use-Case-Sensitivität (schlechte Idee, da nicht alle CLR-Sprachen Groß- und Kleinschreibung beachten), eigene Unterstriche verwenden (auch schlecht, da es mit Standards kollidieren kann) verdammtes Ding), oder benutze verschiedene Namen zusammen (kann zeitaufwendig, schwierig und willkürlich erscheinen).

    
Triynko 14.06.2009 19:28
quelle
0

Fügen Sie einfach einen Unterstrich oder ein einzelnes Buchstabenpräfix für Ihre privaten Mitgliedsvariablen hinzu. Wenn Sie diese Idee nicht mögen, ist das, was Sie in Ihrem zweiten Codeblock getan haben, in Ordnung.

    
Matthew Dresser 20.03.2009 12:33
quelle
0

Das Setzen von X auf Ihre Parameter ist schlecht. Der Konstruktor ist Teil der öffentlichen Schnittstelle Ihrer Klasse und verwirrt nur die Benutzer Ihrer Klasse. Einige bevorzugen die Elementvariablen mit Unterstrichen, was viel besser ist, da sie nur für den Implementierer Ihrer Klasse sichtbar sind. Anderenfalls reicht es aus, dies wie in Ihrem zweiten Beispiel zu verwenden.

    
Jakob Christensen 20.03.2009 12:41
quelle
0

m_foo für private Mitglieder
Foo für öffentliche Eigenschaft
foo für Parameter und lokale Variablen.

Ich bevorzuge es, den Blockbereich von den erweiterten Bereichsgliedern zu unterscheiden, deshalb bleibe ich bei dem Präfix.

    
peterchen 20.03.2009 13:18
quelle
-1

Sie müssen sie irgendwie trennen. Mit 'dies'. ist eine schwache Form der ungarischen Notation, also können Sie genauso gut in die Kugel beißen und Unterstriche oder 'm_' verwenden.

Ich fühle auch "das". ist eigentlich schlimmer, weil in extremen Fällen (d. h. große Methoden) ist es möglich, das "dies". wird weggelassen und die falsche Variable wird referenziert. Ich weiß, dass große Methoden schlecht sind, aber sie kommen natürlich in realen Geschäftsanwendungen mit Entwicklern unterschiedlicher Fähigkeiten vor. Die Verwendung eines Präfixes für private Felder verhindert dieses Szenario.

Es ist verlockend zu argumentieren, dass die Unterstreichung genauso vergessen werden kann wie "dies". würde. Aber das ist inkorrekt, weil der Unterstrich den Namen der Variablen ändert, so dass der einzige Ort, den es möglicherweise vergessen könnte, bei der Definition liegt, nicht bei der Verwendung in der Datei. Während mit dem "Dies". Prefix gibt es keinen Compiler-Fehler, wenn Sie es während der Verwendung vergessen.

Was immer Sie auch wählen, in dieser Situation können Sie ungarisch nicht aus dem Weg gehen, egal, ob Sie "dieses" verwenden. oder unterstreichen. Es ist sowieso nicht so schlimm, wir sind per Konvention gezwungen, Ungarisch für Schnittstellennamen, Kontrollnamen und wahrscheinlich andere Orte zu verwenden, an die ich gerade nicht denken kann.

    
LegendLength 20.03.2009 13:30
quelle

Tags und Links