[stilfrage] funktionsparameter
-
wiedermal ne tolle stilfrage
also, wenn man einer funktion mehrere parameter übergeben möchte, so kann man die sache ja auf verschiedene arten angehen.
einmal natürlich ganz simpel:DoStuff(Par1, Par2, Par3, Par4, Par5);
hat natürlich den vorteil, dass es recht eindeutig ist. allerdings auch den nachteil, dass - wenn man die parameter zb. aus einer datei (savegame etc.)einliesst - nicht sofort alle in einem rutsch übergeben kann. ausserdem wirds nervig, wenn man gar nicht immer alle parameter setzen möchte. dann muss man sich wieder verschiedene varianten der funktion erstellen, was auch schnell unübersichtlich wird.
eine andere methode wäre, der funktion eine spezielle struct zu übergeben.struct DoStuffPar{ int Par1; int Par2; int Par3; int Par4, int Par5}; DoStuffPar Parameters={1,2,3,4,5}; DoStuff(Parameters);
die struct liesse sich auch schnell mit daten füllen (zb. als pointer) und man muss nicht zwingend alle parameter setzen. allerdings muss man jedesmal ein objekt erstellen, was ja auch rcht umständlich ist.
zuguter letzt ist es ja auch recht beliebt, die parameter mit bit-operationen zusammenzusetzen:DoStuff(Par1|Par3|Par4);
so braucht die funktion eigentlich nur einen parameter, auf den dann beliebige werte kombiniert werden können. allerdings hat das ganze auch wieder den nachteil, dass es für dei parameter wieder irgendwo konstanten, enums oder wenns sein muss auch defines gibt, die lösgelöst von der funktion irgendwo im globalen raum rumschwirren, was einerseits unübersichtlich werden kann, andererseits vielleicht auch noch zu konflikten führen könnte.
anregungen, meinungen, ideen?
-
Meine Meinung:
Alles für sein Anwendungsgebiet. Gerade die letzte Methode wirst du nicht überall anwenden können.
-
Die struct finde ich sehr verwirrend, es sei denn die Parameter gehören wirklich zusammen wie zB ein Punkt (x, y und z Wert)
Die 3. Variante ist nur bei Flags sinnvoll - bleibt also die normale für normale Situationen... Wenn du mehr als 4 Parameter übergeben musst/willst, würde ich mir mal das Design neu überlegen - denn sowas sollte idR nicht nötig sein.
-
wie were es mit etwas op überladung
z.b.foobar << Par1 << Par2 << Par3 << Run;
-
Ich glaube, das würde einen außen stehenden noch mehr verwirren.
-
wer cout nicht kennt kann außenvor bleiben
-
Ich finde es nur verwirrend, auf diese Weise Argumente zu übergeben.
Wenn ich mal einen Vorschlag machen dürfte: Meistens lässt es sich bestimmt vermeiden, viele Argumente zu übergeben, indem man sauber objektorientiert programmiert und Methoden in Verbindung mit Objekten aufruft, die die Daten enthalten. Das kann man eigentlich immer einhalten, wenn man sich an das Prinzip "tell, dont ask" hält.
Wenn es definitiv nötig ist, kann man ja aber noch ein struct erstellen und dieses übergeben.Wenn du die Lösung von dir gut findest, ok, ich finde es keine dumme Idee, aber ich denke, ein Unbeteiligter müsste über sowas erstmal grübeln.