Elegantere Lösung für folgenden kurzen Code:



  • Folgerender Code in einer Schleife:

    if(b== iScrDestModul && !boUnload){
    			boUnload=true;
    			lEnd+=RUNIN+ RUNOUT;	
    		}
    
    		if(b== iDestModul && !boLoad){
    			boLoad=true;
    			lEnd+=RUNIN2+ RUNOUT2;	
    		}
    

    Hat jemand ne Idee wie ich jeweils diese beiden IF-Anweisungen kürzer /elganter schreiben könnte?
    Habe nämlich das Gefühl es würde auch kürzer gehen.... grüße

    Achso ja, dier Sinn ist es das jede if anweisung nur einmal in der schleife aufgerufen werden darf, wenn "b== iScrDestModul" oder "b== iDestModul" damit "lEnd+=...." jeweils nur einmal erhöht wird..

    GRüße:)



  • mit else?



  • ne, denk dir ein if weg!! die sind unabhängig voneinander.. hat nix mit else zu tun



  • hem, es sind ja total verschiedene Bedingungen und total unterschiedliche Reaktionen auf die Bedingungen. Kannste nicht mehr viel machen.

    Wenn RUNIN und RUNOUT konstanten sind, würde ich mir gedanken um eine neue Konstante machen. Sowas:

    const static int RUN_END = RUNIN + RUNOUT;
    const static int RUN_END2 = RUNIN2 + RUNOUT2;
    
            if(b== iScrDestModul && !boUnload){
                boUnload=true;
                lEnd+=RUN_END;   
            }
    
            if(b== iDestModul && !boLoad){
                boLoad=true;
                lEnd+= RUN_END2;   
            }
    

    Sollte nochmal so eine Konstellation auftauchen, kann man immer RUN_END nehmen.



  • Ich sehe 4 verschiedenen Vergleiche und 4 verschiedenen Zuweisungen mit jeweils unterschiedlich beteiligten Variablen. Da geht nix kürzer.



  • kenner der sprache! schrieb:

    Ich sehe 4 verschiedenen Vergleiche und 4 verschiedenen Zuweisungen mit jeweils unterschiedlich beteiligten Variablen. Da geht nix kürzer.

    Ich sehe nur drei...

    if(b == iScrDestModul && !boUnload)
    {
      boUnload=true;
      lEnd += RUNIN + RUNOUT;	
    }
    else if(b== iDestModul && !boLoad)
    {
      boLoad=true;
      lEnd += RUNIN2 + RUNOUT2;	
    }
    

    Jetzt wird der zweite Part nicht mehr geprüft, sofern der erte erfolgreich war.
    Ich würde sagen, dass ist, was xBlackKnightx meinte.

    // Edit: Das geht natürlich nur, wenn sichergestellt ist, das iDestModul immer ungleich iSrcDestModul ist...



  • lgoscherweise habt ihr ja recht mit else, aber es könnte natürlich möglich sein, das beide ifanweisung nacheinder druchlaufen werden.. würde zwar nix bringen in der späteren maschine, aber es müsste möglich sein das zu machen, also kein else



  • BorisDieKlinge schrieb:

    lgoscherweise habt ihr ja recht mit else, aber es könnte natürlich möglich sein, das beide ifanweisung nacheinder druchlaufen werden.. würde zwar nix bringen in der späteren maschine, aber es müsste möglich sein das zu machen, also kein else

    Wenn iDestModul immer ungleich iSrcDestModul ist, dann kann die zweite Bedingung niemals wahr werden.
    Eine Frage, die immer mit false beantwortet wird, braucht man auch nicht zu fragen.



  • Artchi schrieb:

    [cpp]
    const static int RUN_END = RUNIN + RUNOUT;
    const static int RUN_END2 = RUNIN2 + RUNOUT2;

    alles gross schreiben ist aber nicht schön...



  • Je nachdem, wie oft (und frühzeitig) die Bedingung 'b==iSrcDestModul' erfüllt wird, könntest du auch die Reihenfolge der Vergleiche umstellen (Stichwort "Short-Cut-Evaluation").


Anmelden zum Antworten