Verben in Methodennamen klein oder groß?
-
ich lass set weg und mach void value(T v); bzw. T value() const;
-
kingruedi schrieb:
ich lass set weg und mach void value(T v); bzw. T value() const;
Was imho eigentlich intelligent ist, denn: set/get ist eigentlich "klar", und wer set und get verwenden würde, würde auch immer vor jede Klasse und Variable "mypräfix" streiben statt einen Namespace zu bauen!
Andererseits dumm wenn value(T v) einen Defaultwert bekommen soll.
MfG SideWinder
-
warum sollte man das machen?
struct foo { void set_bar(int i=0); //... }; int main() { foo food; food.set_bar(); }
finde ich ist nicht schön leserlich, dann doch lieber eine eigene Funktion, die die gleiche Aufgabe mit einem Standard Wert erledigt
-
Defaultwerte setzen? Oder was meinst du?
MfG SideWinder
-
imho sind fragen zu einem speziellen stil die wurzel allen bösen.
-
SideWinder schrieb:
Defaultwerte setzen? Oder was meinst du?
jo
Iterator schrieb:
imho sind fragen zu einem speziellen stil die wurzel allen bösen.
ich finde man sollte Programmierstile schon disikutieren, weil einige Vorteile und Nachteile haben. Das erleichtert es, einen idealen Stil zu finden IMHO.
Natürlich bringt es nichts, wenn alle sagen "mein Stil ist der beste, du bist ein @#$!>(!FOO*¬@"
-
kingruedi schrieb:
Natürlich bringt es nichts, wenn alle sagen "mein Stil ist der beste, du bist ein @#$!>(!FOO*¬@"
Eben... darauf läuft es aber in den meisten fällen immer hinaus
-
kingruedi schrieb:
ich lass set weg und mach void value(T v); bzw. T value() const;
Das gefällt mir aus einigen Gründen nicht - vor allem weil es das Lesen von Code für die Leute schwerer macht, die aus Sprachen kommen, die keine Überladungen und unterschiedlichen Signaturen für die gleiche Funktion beherrschen.
Und es ist auch irgendwie semantisch verzerrend - mir geht dabei die "Tätigkeit" im Namen verloren. Angenommen, das set besteht aus mehr als nur einem reinen member = wert. Dieser zusätzliche Vorgang (z.B. Wert prüfen) versteckt sich dann hinter einem foo.laenge(5);. Da muß man ganz genau die Klassendeklaration kennen, um zu wissen was hier passiert.
Aus dem gleichen Grund gefallen mir auch die zunächst verlockenden Propertys (z.B. C#, C++-Builder-Erweiterung für C++, ObjectPascal) nicht so gut - denn wenn man den Programmfluß einfach so liest:
... foo.farbe = Rot; foo.laenge = 3.14; ...
geht verloren, daß hier mit dem "=" jeweils unter Umständen zwei richtig komplexe (evtl. auch teure) Vorgänge ausgelöst werden. Oder auch nicht! Vielleicht ist's ja doch keine Property gewesen, sondern nur irgendwas public...
Ich ordne das unter die Kategorie ein "elegant in eigenem Code, aber bei schnellem Lesen verwirrend".
-
Hallo,
ich bevorzuge ebenfalls einen Kleinbuchstaben als ersten Buchstabe einer Methode.Zum Thema set/get habe ich keinen festen Stil. Meine Methoden zum Setzen von Werten heißen also nicht alle automatisch setIrgendwas und die zum Hohlen nicht getIrgendwas. Vielmehr versuche ich das Abhängig von dem Irgendwas zu machen.
Dadurch wird aus einem Player::setTeamId schnell mal ein Player::transfer usw.
Nur wenn mir überhaupt nix intelligentes einfällt, bzw. wenn das setIrgendwas sich gut anhört (also wirklich die Aktion beschreibt und nicht nur deren Implementation) greife ich zu diesem Präfix. Dann aber lieber setIrgendwas, als kingruedis Irgendwas-Variante.
Die benutze ich eigentlich nur für das Liefern von (meist numerischen) Werten.
-
Warum machst du auch bei Membervariablen den ersten Buchstaben klein??
Aus dem cpp2html Source:
std::string appPath_; std::string outputDir_; std::string unexpectedArgs_; std::vector<FileNamePair> fileNames_; CommandLineParser cmdlineParser_; ConfigReader* cfgReader_;
Hat das irgendeinen Sinn? Warum heißt es icht AppPath_, OutputDir_ usw.?
-
Die weitgehend übliche Regel: Namen von Typen, Klassen, Enums, Strukturen beginnen mit einem großen Buchstaben, alle anderen Bezeichner mit einem Kleinbuchstaben. Demnach werden also auch Instanzen mit einem Kleinbuchstaben begonnen:
ObjektKlasse einObjekt_;
-
Die weitgehend übliche Regel: Namen von Typen, Klassen, Enums, Strukturen beginnen mit einem großen Buchstaben, alle anderen Bezeichner mit einem Kleinbuchstaben
Genau daran versuche ich mich zu halten.
Nur das Enums bei mir nicht immer einheitlich sind. Hängt von ihrer Bedeutung ab. Wenn ich den enum-Hack verwende, kann ein enum auch mal klein beginnen.
Ansonsten sind die Konstanten bei mir häufig komplett groß (-> z.B. Fehlercodes). Allerdings muss ich gestehen, dass ich nach wie vor in der Stil-Such-Phase bin.
-
Marc++us schrieb:
Und es ist auch irgendwie semantisch verzerrend - mir geht dabei die "Tätigkeit" im Namen verloren. Angenommen, das set besteht aus mehr als nur einem reinen member = wert. Dieser zusätzliche Vorgang (z.B. Wert prüfen) versteckt sich dann hinter einem foo.laenge(5);. Da muß man ganz genau die Klassendeklaration kennen, um zu wissen was hier passiert.
Also ich seh das so, dass mir egal ist, was im Hintergrund durchgeführt wird beim setzen. Solange der einfach die Variable setzt (oder eine Exception schmeißt). Ich weiss aber auch nicht, was da ein set vor dem Namen helfen soll und die Prüfung wird ja idr. per assert im Debug Modus durchgeführt.
Wenn mehr passiert als nur das setzen, dann werd ich die Funktion auch umbenennen! (aber dann in einen noch besser treffenden Namen als setFoo)
-
Allerdings muss ich gestehen, dass ich nach wie vor in der Stil-Such-Phase bin.
Merkt man. In deim C++ 2 HTML Konverter Projekt wechselst du deinen Stil ja dauernd.
-
Nur das Enums bei mir nicht immer einheitlich sind. Hängt von ihrer Bedeutung ab. Wenn ich den enum-Hack verwende, kann ein enum auch mal klein beginnen.
Du benennst enums beim enum-Hack?
class Foo { public: enum bar {quer=...}; };
Das ist interessant. Und waum da dann klein? Einfach so?
Ansonsten sind die Konstanten bei mir häufig komplett groß (-> z.B. Fehlercodes). Allerdings muss ich gestehen, dass ich nach wie vor in der Stil-Such-Phase bin.
Da habe ich auchmal gemacht. Aber inzwischen werden nurnoch Makros komplett großgeschreiben. Das ist IMHO eindeutiger. Vielleicht einfach mal ausprobieren.
Und zu der set- und get-Geschichte: ich verwende set_ und get_, da Funktionen und Methoden bei grundsätzlich mit Verben beginnen.
Allerdings brauche ich solche Methoden erlich gesagt recht selten. Sind meine Designs so seltsam?Aber bitte keine Disskusion darüber anfangen, ob einzelne Worte dadruch getrennt werden sollen, dass Sie groß beginnen oder durch einen Unterstrich. Das hatte ich jetzt schon mehrmals in anderen Foren und fürt grundsätzlich zu nichts.
-
also ich verwende keine Macros, deswegen sind konstanten bei mir idr. komplett groß. Der Rest ist aber klein geschrieben
-
@Helium
enum-Hack:
Benutzung einer unbenannten enum zur Simulation statischer Integralen-Konstanten innerhalb einer Klasse bei Compilern die selbige nicht unterstützen:class Foo { static const int maxSize = 10; ... };
Da dies nicht auf allen Compiler funktioniert, nimmt man hier dann ein enum:
class { enum {maxSize = 10}; };
und genau in diesen Situationen sehen meine enum-Konstanten genauso aus, wie (Member-)Variablen auch.
<edit>Ah. Jetzt verstehe ich deine Frage. Nein ich benenne die enums natürlich nicht. Mein Fehler. Was ich meinte war die Benennung der Konstanten</edit>
-
Ich hab mal eine zeitlang komplett alles klein geschrieben (wie in der stl) und fand das vom Programmieren und lesen her noch am angenehmsten. Leider hat da der Compiler öfter rumgemuckt
-
DrGreenthumb schrieb:
Ich hab mal eine zeitlang komplett alles klein geschrieben (wie in der stl) und fand das vom Programmieren und lesen her noch am angenehmsten. Leider hat da der Compiler öfter rumgemuckt
In wie fern hatte der an diesem Stil etwas auszusetzen?
MfG SideWinder
-
gab öfter Namenskonflikte.. das hat genervt.