Variablen -> Guter Programmierstil
-
Jockelx schrieb:
Wenn man die Konvention gewohnt ist, sieht man sofort,
dass da halt nicht der Setter genommen wird, sondern direkt das Member.Hm. Ich halte diese Unterscheidung für quasi-nichtexistend. Es gab dazu irgendwo mal nen netten Blog-Artikel: Da wir Menschen gewohnt sind, dass sich die Bedeutung eines Wortes generell nicht sehr verändert, wenn wir die Groß-/Kleinschreibung verändern, überlesen wir solche Änderungen sehr häufig. Ich halte diese Argumentation für plausibel und kann ihr aus eigener Erfahrung auch zustimmen. Außerdem vergisst man schnell mal, ne Shift-Taste zu drücken. Aber aus Versehen 'm_' zu tippen, das passiert glaube ich niemandem.
– Ich sehe hier definitiv ein großes Gefahrenpotential. Aber selbst wenn andere das für nicht so groß halten: Es lässt sich so *einfach* eliminieren.
-
Gut, mag sein. Ich nutze C# nur privat und in kleinen, übersichtlichen Projekten.
Deshalb kann ich vielleicht nicht so super mitreden. Aber zumindest da hatte
ich nie Probleme die Getter/Setter von den Membern mit dieser Konvention zu unterscheiden.Jockel
-
Konrad Rudolph schrieb:
Hm. Ich halte diese Unterscheidung für quasi-nichtexistend. Es gab dazu irgendwo mal nen netten Blog-Artikel: Da wir Menschen gewohnt sind, dass sich die Bedeutung eines Wortes generell nicht sehr verändert, wenn wir die Groß-/Kleinschreibung verändern, überlesen wir solche Änderungen sehr häufig.
und
this.accountBalance = accountBalance_;schreit nach einem fehler?
– Ich sehe hier definitiv ein großes Gefahrenpotential. Aber selbst wenn andere das für nicht so groß halten: Es lässt sich so *einfach* eliminieren.
ich sehe zwischen a und a_ nicht viel unterschied. das problem ist: will ich hier setter verwenden oder nicht? ich will eigentlich fast nie intern die checks eines set-properties haben. maximal in einem ctor. aber um ehrlich zu sein, ich weiss nicht wann ich das letzte mal einen setter hatte der mehr gemacht hat als dumme zuweisung.
und erklär mir nochmal den großen vorteil von
this.a = a_;
gegenüber
this.a = a;
ich habs nicht ganz verstanden.
-
Shade Of Mine schrieb:
und erklär mir nochmal den großen vorteil von
this.a = a_;
gegenüber
this.a = a;
ich habs nicht ganz verstanden.Musst Du auch nicht, ich finde den Unterschied auch nicht deutlich genug. Daher verwende ich auch 'm_' als Präfix. Dort ist der Unterschied allemal deutlich.
-
Konrad Rudolph schrieb:
Musst Du auch nicht, ich finde den Unterschied auch nicht deutlich genug. Daher verwende ich auch 'm_' als Präfix. Dort ist der Unterschied allemal deutlich.
das bringt aber ein enormes intellisense problem mit sich: intellisense fast nutzlos. das schränkt die produktivitaet ein.
weiters gibt das selbe argument wie bei groß/kleinschreibung:
der mensch erkennt ein wort anhand der ersten paar buchstaben. bzw, die ersten paar buchstaben sind signifikant.das ist zB ein grund warum gross/kleinschreibung wieder halbwegs funktioniert, weil der 1. buchstabe das ist was du als erstes erkennst

-
Shade Of Mine schrieb:
Konrad Rudolph schrieb:
Musst Du auch nicht, ich finde den Unterschied auch nicht deutlich genug. Daher verwende ich auch 'm_' als Präfix. Dort ist der Unterschied allemal deutlich.
das bringt aber ein enormes intellisense problem mit sich: intellisense fast nutzlos. das schränkt die produktivitaet ein.
Inwiefern? Kann ich nicht nachvollziehen. (Ich greife ja nur aus der Property selbst auf das Feld zu).
der mensch erkennt ein wort anhand der ersten paar buchstaben. bzw, die ersten paar buchstaben sind signifikant.
das ist zB ein grund warum gross/kleinschreibung wieder halbwegs funktioniert, weil der 1. buchstabe das ist was du als erstes erkennst

Aha … das erzählst Du mir in einem C++-Form … alles klar.

– Du hast ja recht. Aber ein durch '_' getrenntes Präfix kann man für sowas ziemlich gut „ausblenden“.
Siehe auch: http://dotnet.mvps.org/dotnet/articles/camelcase/
Der Artikel bringt das ziemlich gut auf den Punkt und ist m.E. der beste zu diesem Thema.
-
Konrad Rudolph schrieb:
Inwiefern? Kann ich nicht nachvollziehen. (Ich greife ja nur aus der Property selbst auf das Feld zu).
du hast für jede variable ein property??
Aha … das erzählst Du mir in einem C++-Form … alles klar.

– Du hast ja recht. Aber ein durch '_' getrenntes Präfix kann man für sowas ziemlich gut „ausblenden“.
genauso leicht wie man einen gross/klein buchstaben als signifikant ansehen kann

Siehe auch: http://dotnet.mvps.org/dotnet/articles/camelcase/
Der Artikel bringt das ziemlich gut auf den Punkt und ist m.E. der beste zu diesem Thema.
es gibt einen unterschied zwischen "das beste wo gibt" und "genauso fehlerbehaftet wie X"

ich habe nie gesagt dass ein Stil der beste ist. ich habe lediglich mehrere alternativen zu deinem stil gezeigt wie man gewisse probleme die du hast umgehen kann.
-
Shade Of Mine schrieb:
Konrad Rudolph schrieb:
Inwiefern? Kann ich nicht nachvollziehen. (Ich greife ja nur aus der Property selbst auf das Feld zu).
du hast für jede variable ein property??
Kommt drauf an. Wenn ich in VB oder C# programmiere schon, denn da erstellt mir die IDE die ja quasi automatisch (und der Compiler kann sie eh schön wegoptimieren). In C++ erstelle ich, mangels schöner Syntax, fast nie Getter/Setter, es sei denn, ich brauche sie (eben wegen einer Bereichsüberprüfung oder was-weiß-ich). Java programmiere ich nicht, aber wenn ich es tue, dann halte ich mich hier an die Richtlinien und erstelle auch für alles Getter und Setter und komme mir extrem affig vor.
ich habe nie gesagt dass ein Stil der beste ist. ich habe lediglich mehrere alternativen zu deinem stil gezeigt wie man gewisse probleme die du hast umgehen kann.
Jap, ist auch so angekommen. Das ist doch der Sinn einer Diskussion. Wenn alles ganz klar und einfach wäre, bräuchten wir das Forum nicht.

-
Also ich benutz eigentlich auch für alles properties, da die dann in der IDE diese bilder(eine list mit einer hand drauf) haben, dass lässt dann diese dinger im intelliSense wirklich hervorstechen. Somit kann ich die öffentlichen interfaces(oder anderer terminus gefällig?) sehr leicht identifizieren ohne, dass ich groß auf den namen achten muss.
-
Also ich habe quasi nie Properties - egal welche Sprache. Property ist für mich ein Accessor und den brauche ich nur, wenn er zum Public Interface gehoert...
wenn ich mir selbst mit den richtigen werten nicht vertraue, dann baue ich wohl lieber invarianten ein :p