Optionale Parameter?



  • Shade Of Mine schrieb:

    Optionator schrieb:

    Im Moment haben wir staendig Fehler, weil sich Entwickler zu wenig Gedanken ueber Pipeline States machen. Drum haben wir uns entschiedene eine OPTIONALE Hilfsfunktion anzubieten, mit der man die wichtigsten States setzen kann.

    Schreit nach einem simplen Config-Objekt.
    Wozu muss ich OFF setzen? Ich setze nur die Sachen die ich brauche, alles andere ist OFF. Siehe Tachyons Post auf Seite 2.

    Dein Ansatz ist einfach falsch. Deshalb sind alle Lösungen nur krüppelig.

    👍
    Mr. Optionator tritt hier anonym auf und trollt rum.
    Sieht mir fast so aus wie die 1000. Kiddie-Grafik-Engine, die im Endeffekt eine einzige Krüppelei zu sein scheint.



  • Muss es unbeding eine Funktion sein? Geht nicht vielleicht ein Function Object, das die entsprechenden Parameter als member besitzt und nur den operator() überlädt?

    Als Nonsens Lösung könnte ich noch

    std::map<std::string, boost::any>

    vorschlagen, fehlt noch in der Sammlung 😃



  • struct OptionalStatesSet
    {
        boost::optional<temperature> temp;
        boost::optional<temperature> temp2;
        boost::optional<int> blah;
        boost::optional<foo> blubb;
        boost::optional<bar> blobber;
        // ...
    };
    
    void SetSomeStates(OptionalStatesSet const& states);
    
    void Foo()
    {
        OptionalStatesSet states;
        states.temp = 123;
        states.temp2 = 10000;
        SetSomeStates(states);
    }
    

    So.
    Zwingt natürlich auch niemanden sich über sämtliche Member in "OptionalStatesSet" Gedanken zu machen. Dafür hat man aber ne schöne Übersicht was es alles für States gibt, wo man sehr schnell nachsehen kann. Wenn man das will. Und wenn man nicht will schreibt man sowieso scheiss Code.
    Was ich an der Variante gut finde: man sieht beim Aufruf wie der Wert heisst, und nicht nur an welcher Stelle einer Parameterliste er steht.

    Ansonsten:

    void SetSomeStates(boost::optional<int> const& s1, boost::optional<int> const& s2 /* uswusf */);
    

    Das Dumme an der Lösung ist jetzt wieder, dass man beim Aufruf einen Haufen Zahlen/Werte stehen hat, ohne dass dabei ersichtlich ist was sie bedeuten. Je mehr Werte, desto schlimmer. Parameter durchzählen wird ab spätestens 5-6 Parametern *sehr* lästig.

    Jetzt kannst du dir aussuchen von welcher Variante du annimmst dass sie zu weniger Fehlern/Aufwand/... führen wird.

    Ich würde in den meisten Fällen die Variante mit der struct vorziehen.



  • Die struct-Lösung hätte ich auch vorgeschlagen, nur wieso sind deine Member boost::optional?

    Edit: Ach so, schon gut, er will keine default-Werte, sondern wissen ob was gesetzt wurde.



  • hustbaer schrieb:

    Zwingt natürlich auch niemanden sich über sämtliche Member in "OptionalStatesSet" Gedanken zu machen.

    Laesst sich easy zur runtime checken und asserten.



  • Shade Of Mine schrieb:

    hustbaer schrieb:

    Zwingt natürlich auch niemanden sich über sämtliche Member in "OptionalStatesSet" Gedanken zu machen.

    Laesst sich easy zur runtime checken und asserten.

    Naja "easy" ist Ansichtssache. Es geht auf jeden Fall nicht mehr mit einfach nur boost::optional .

    Er möchte ja erlauben dass bestimmte Werte nicht gesetzt werden. Er will nur dass der Programmierer "gezwungen" wird sich darüber Gedanken zu machen welche Werte er nun setzen soll und welche nicht.

    Natürlich geht es trotzdem, aber eben wie gesagt nicht direkt mit boost::optional . Man müsste eine eigene Klasse machen die einerseits "optional" (nullable) Semantik hat und sich zusätzlich merkt ob sie jemals zugewiesen wurde. Ist natürlich alles keine Hexerei, aber wie gesagt: "easy" ist Ansichtssache 😉



  • Wie schon gesagt wurde, dein Vorhaben ist Schwachsinn.



  • nurf schrieb:

    Shade Of Mine schrieb:

    Optionator schrieb:

    Im Moment haben wir staendig Fehler, weil sich Entwickler zu wenig Gedanken ueber Pipeline States machen. Drum haben wir uns entschiedene eine OPTIONALE Hilfsfunktion anzubieten, mit der man die wichtigsten States setzen kann.

    Schreit nach einem simplen Config-Objekt.
    Wozu muss ich OFF setzen? Ich setze nur die Sachen die ich brauche, alles andere ist OFF. Siehe Tachyons Post auf Seite 2.

    Dein Ansatz ist einfach falsch. Deshalb sind alle Lösungen nur krüppelig.

    👍
    Mr. Optionator tritt hier anonym auf und trollt rum.
    Sieht mir fast so aus wie die 1000. Kiddie-Grafik-Engine, die im Endeffekt eine einzige Krüppelei zu sein scheint.

    Sagt das Kiddie, das im Profil zu seinem Billigspiel verlinkt. Welch Ironie 😃

    Habs mittlerweile mit optional geloest. 🕶 Klappt wunderbar und ich hab genau das, was ich wollte. Endlich muss man ueber alle wichtigen Params nachdenken.

    Schon lustig, wie viele Leute mit Null Ahnung sich hier als Design Gurus aufspielen. 🙄



  • Optionator schrieb:

    Habs mittlerweile mit optional geloest. 🕶 Klappt wunderbar und ich hab genau das, was ich wollte. Endlich muss man ueber alle wichtigen Params nachdenken.

    ROFL
    Ja, wennst glaubst...

    Schon lustig, wie viele Leute mit Null Ahnung sich hier als Design Gurus aufspielen. 🙄

    Mhm 🙄



  • hustbaer schrieb:

    [...]

    Lass Dich doch nicht auf sein Niveau herab. Dazu ab besten folgende Regel: Diskutiere nicht mit Idioten... Sie ziehen dich auf ihr Niveau herunter und schlagen dich dort mit Erfahrung!



  • Tachyon schrieb:

    hustbaer schrieb:

    [...]

    Lass Dich doch nicht auf sein Niveau herab. Dazu ab besten folgende Regel: Diskutiere nicht mit Idioten... Sie ziehen dich auf ihr Niveau herunter und schlagen dich dort mit Erfahrung!

    Wie wahr. 🙄
    Noch schlimmer sind eigentlich nur Idioten, die meinen sie wuessten alles und muessten andere staendig belehren. Obwohl sie keinerlei Ahnung vom Kontext haben.



  • Der Punkt ist, dass es keinen Kontext gibt, in dem dein Vorhaben sinn macht.


Anmelden zum Antworten