Guter Stil -> methoden set/get
-
Meine Frage ist erstmal eine Geschmackssache,
aber vll. kann mir jemand sagen welche Art von Verwendung hier günstiger ist.Entweder ich schreibe meine methoden so
void image_figure::set_pos(int x,int y) { next.x = x; next.y = y; } SDL_Rect image_figure::get_pos() { return next; }oder ich definiere die beiden in einer einzigen
SDL_Rect image_figure::pos(int x,int y) { if(x) next.x = x; if(y) next.y = y; return next; } //mit deklaration in der klasse: pos(int=0,int=0)Welche der beiden Möglichkeiten ist besser von der performance her gesehen,
und für die bedienbarkeit?
-
Beides würde ich nicht machen. get/set aber schon, jedoch eher so:
void void image_figure::set_pos(const SDL_Rect &pos) { next = pos; } const SDL_Rect& image_figure::get_pos() const { return next; }Würde ich mal sagen, ist das schnellste und "hübscheste". Ich selbst würde mich nicht um das zusammensetzen von x und y kümmern, was du in der setter ja gemacht hast. Das soll mal schön der Nutzer deiner Methode machen, evtl. hat er sogar schon die ganze Zeit ein fertiges SDL_Rect und kann dieses gleich benutzen. In deiner Variante hätte er vielleicht schon eines und müsste es sogar vorher wieder "auseinander nehmen".
Wenn du x und y getrennt anbieten willst, kannst du ja eine zweite setter machen... die du schon hattest.
-
class Foo { void bar(int x); int bar() const; int _bar; };Eine Methode für beides ist purer Unsinn. Performance spielt da keine Rolle da es geinlined wird. Hier gehts wohl eher um Datenkapselung. Falls du z.B. irgendwann nochmal was bestimmtes machen willst sobald die Koordinaten geändert werden.
-
Ich würde mal sagen, alles wo du entscheidest, wie die Sache zu laufen hat (entweder get ODER set) ist schneller als die entsprechende Laufzeitvariante (hier mit zwei unnützen if-Abfragen oder einem ungenutzten Rückgabewert.
Desweiteren kann ich mir nicht so recht vorstellen, dass der Punkt 0/0 undefiniert ist. WENN du diesen Ansatz benutzt, dann musst du schon überladen:void image_figure::pos(int x,int y) { next.x = x; next.y = y; return next; } SDL_Rect image_figure::pos () const { return next; }Das const am Ende der Deklaration ist ein weiterer Grund für diese Implementierung. Allerdings erkennst du hier auch sehr deutlich, dass das ganze mit get/set Methoden viel eindeutiger und intuitiver ist.
-
Fachman für OOP! Also gekapselt hatte er sie ja, das war nicht falsch!
-
Artchi schrieb:
Fachman für OOP! Also gekapselt hatte er sie ja, das war nicht falsch!
Hatte ich das jemals behauptet?