Effizienter Code



  • Hallo,

    was ist besser.

    void selectGate1();
    void selectGate2();
    void selectGate3();
    void selectGate4();
    void selectGate5();
    void selectGate6();
          //
    

    usw.

    oder

    selectGate(int number)
    {
        if(number == 1)
             selectGate1();
        if(number == 2)
             selectGate2();
        //usw.
    }
    

    Der Unterschied ist viele Funktionen oder nur eine und dann if.


  • Mod

    Der zweite Code hat ein Indirektion mehr, kann dafür aber mehr. Es ist schließlich eine Erweiterung der ersten Variante. Wenn die erste Variante ausreicht, dann ist diese offensichtlich (minimalst) effizienter. ~Außerdem kann man die zweite Variante nochmals verbessern, da number ja wohl kaum jemals gleichzeitig gleich 1 und gleich 2 sein wird.~

    Ich habe aber den Eindruck, dass du deinen Code soweit entstellt hast, dass die Frage nicht sinnvoll zu beantworten ist. Obige Antwort passt zwar zu der Frage, die du gestellt hast, aber diese Antwort sollte derart offensichtlich sein, dass die Frage gar nicht erst aufgekommen wäre. Die Antwort ist daher vermutlich wertlos, da du dein Problem unzureichend dargestellt hast. Mit mehr Kontext in der Fragestellung wäre das nicht passiert.



  • SeppJ schrieb:

    Außerdem kann man die zweite Variante nochmals verbessern, da number ja wohl kaum jemals

    ja mit else if .



  • Was ist besser? Autos oder links abbiegen?



  • XXXYYY schrieb:

    ja mit else if .

    Wohl eher mit switch-case.
    Oder gleich ganz anders wie

    selectGate(int number)
    {
        selectedGate = number;
    }
    

    Eine Funktion für alle Gates. 🙂


  • Mod

    alterhase schrieb:

    Was ist besser? Autos oder links abbiegen?

    👍 Die Analogie trifft perfekt meine Probleme mit der Fragestellung.



  • DarkShadow44 schrieb:

    XXXYYY schrieb:

    ja mit else if .

    Wohl eher mit switch-case.

    Ernsthafte Frage. Ist switch case effizienter als if ...else if ... else ?


  • Mod

    XXXYYY schrieb:

    Ernsthafte Frage. Ist switch case effizienter als if ...else if ... else ?

    Sofern der Compiler nicht in der Lage ist, die if-Kaskade zu einem switch zu optimieren, kann das switch effizienter sein, unter der Voraussetzung, dass die vorkommenden Labels in einem halbwegs übersichtlichen Bereich liegen. switch ist quasi eine Optimierungsanweisung an den Compiler einen Jump Table zu erzeugen. Damit kann anhand des switch-Arguments gleich an die richtige Stelle gesprungen werden, anstatt eine ganze Kaskade einzelner Prüfungen vorzunehmen.



  • "Besser" in welchem Sinn? Der Titel sagt "Effizienter Code". Ich gehe davon aus, dass Du performance meinst. Da muss ich fragen, ob Du analysiert hast, ob diese Stelle im Programm überhaupt für die Gesamtperformance relevant ist.

    Schreibe Code erst mal korrekt, übersichtlich und damit gut wartbar. Wenn Dein Programm nicht schnell genug ist, dann schaust Du erst mal, woran es liegt. Und an solchen Stellen liegt das fast nie.

    Siehe auch Rules Of Optimization.


Log in to reply