Stilfrage: Klassen und Inlinefunktionen
-
Im Chromium Projekt scheint es auch nicht einheitlich geregelt, ob kleine Memberfunktionen (meist getter und setter) bereits in der Klassendeklaration definiert werden oder explizit nach der Klassendeklaration. Welche der beiden folgenden Implementierungsbeispiele sind stilistisch "sauberer"?
// Define "small" functions within the class declaration. class Timer { public: Timer() { Reset(); } void Reset() { offset = SystemTime(); } int Get() const { return SystemTime() - offset; } private: int SystemTime(); int offset; };// Define "small" functions explicitly. class Timer { public: Timer(); void Reset(); int Get() const; private: int SystemTime(); int offset; }; Timer::Timer() { Reset(); } inline void Timer::Reset() { offset = SystemTime(); } inline int Timer::Get() const { return SystemTime() - offset; }
-
Die obere, wenn der private-Teil noch vorgezogen wird.
-
Stilistisch wird empfohlen den "private" Part nach dem "public" Part zu implementieren, ist aber nicht entscheidend...
Würdest du auch obere Implementierung vorziehen, wenn es eine Klasse mit 50-100 4-5 zeiligen Inline Funktionen ist?
Gruss
-
Tomahawk schrieb:
Würdest du auch obere Implementierung vorziehen, wenn es eine Klasse mit 50-100 4-5 zeiligen Inline Funktionen ist?
Flasche Fragestellung. Das führt nur zu solchen Betrachtungen wie "Was hättest Du lieber? Wenn alle Menschen jeden Tag 10 Liter Wasser trinken müßten? Oder wenn keiner Wasser bekäme?"
Meinen Stil für reibungsloses Zusammenspiel mit so groben Entwurfsfehlern zu optimieren, halte ich nicht für sinnvoll.
-
Tomahawk schrieb:
Stilistisch wird empfohlen den "private" Part nach dem "public" Part zu implementieren,
Tja, wenn Du das glaubst, wirst Du auch glauben, daß man alle Funktionen aus der Klasse rausnehmen sollte.
Tomahawk schrieb:
ist aber nicht entscheidend...
Ist für mich sehr wichtig. An den beiden private-Sachen hier sehe ich sofort, zu was die Klasse überhaupt sinnvoll noch in der Lage sein kann. Der weitere Code bestätigt das dann.
Andersrum lese ich zuerst den weiteren Code, aber ich frage mich immer, wie es dazu kommt, und was sie wohl noch so alles können wird. Also Deine Reihenfolge liest sich für mich so, daß da eine Schnittstelle daherkommt, die geheim hält, was unter der Haube ist. Das Mysterium wird wie in einem Stephen-King-Roman Deklaration für Deklaration enthüllt, aber es bleibt rätselhaft bis ganz zum Schluß. Das nervt mich unheimlich an. Ich wüßte gerne, wer diese Regel erfunden hat und würde ihm mal so richtig weh tun.
-
So eine Regel gibt es nicht. Stilfragen sind allgemein nicht sonderlich sinnvoll meiner Meinung nach. Letztendlich muss man die Vorgaben des Unternehmens erfüllen und den eigenen Stil dem der Gruppe unterordnen. Der Rest erübrigt sich.
Wir sind hier auch nicht bei "Germanys next beatiful Code". Ich selbst bevorzuge die public dann private variante aus genau dem entgegengesetzten Grund wie Volkard. Ich will wissen wie ich die Klasse benutzen soll, danach wie sie implementiert ist(was eigentlich wichtiger ist). Stilfragen sind einfach nur Meinungs und Gewohnheitssache in einem so trivialen Fall.
-
HighLigerBiMBam schrieb:
Ich selbst bevorzuge die public dann private variante aus genau dem entgegengesetzten Grund wie Volkard. Ich will wissen wie ich die Klasse benutzen soll, danach wie sie implementiert ist (was eigentlich wichtiger ist).
No. Das behauptest Du nur, daß das wichtiger sei. Das Gegenteil ist der Fall.
Ich kann die Klasse erst perfekt einsetzen, wenn ich weiß, was sie ist. Die Schnittstelle ist nebensächlich, solange sie vollständig ist, und trägt für's Verständnis nur wenig bei. Für einen schnellen Abriß der Klasse schaue ich in den Code. Die Methodennamen zeigt mir ja die IDE während des Tippens schon an.
-
volkard schrieb:
HighLigerBiMBam schrieb:
Ich selbst bevorzuge die public dann private variante aus genau dem entgegengesetzten Grund wie Volkard. Ich will wissen wie ich die Klasse benutzen soll, danach wie sie implementiert ist (was eigentlich wichtiger ist).
No. Das behauptest Du nur, daß das wichtiger sei. Das Gegenteil ist der Fall.
Ich kann die Klasse erst perfekt einsetzen, wenn ich weiß, was sie ist. Die Schnittstelle ist nebensächlich, solange sie vollständig ist, und trägt für's Verständnis nur wenig bei. Für einen schnellen Abriß der Klasse schaue ich in den Code. Die Methodennamen zeigt mir ja die IDE während des Tippens schon an.Ich behaupte gar nichts. So etwas ist eine (meine) Meinung, den Teil in der Klammer hast du anscheinend großzügig überlesen.
-
Google C++ Style Guide -> Classes -> Declaration Order
[...]
Use the specified order of declarations within a class: public: before private:, methods before data members (variables), etc.
[...]
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Declaration_Order
-
Der Programmierstil ist keineswegs egal - im Gegenteil.
Man schaue Chromium an. Das Projekt wirkt wie aus einem Guss.
Wir haben derzeit das Problem das es keinen Style Guide in unserer Abteilung gibt, an den man sich *verbindlich* hält. Das hat zur Folge, dass keiner den Code des anderen gescheit lesen und weiterbauen kann und will.
Das Gesamtprojekt sieht dementsprechend "unrund" aus. Nach meiner Erfahrung kann das zu fehleranfälligerem Code führen.
Gruss
-
Wie gesagt verschiedene Menschen verschiedenen Meinungen. Darum ist die Stilfrage nicht wirklich von Bedeutung. Wichtig ist die Vorgabe die du vom Arbeitgeber bekommst. Es ist komplett egal und Standardkonform ob du nun es so oder anderst herum machst. Sei damit einfach nur konsequent.