Abfragen immer mit if und else



  • Hi,

    müssen Abfragen immer über if und else laufen, oder darf man das auch ohne

    int a,b,c;
    
    // Ist das erlaubt ?
    a = (b > c);
    // oder
    a = ( *y < JP.zoomYLL );
    
    // oder immer mit if/else
    if ( b > c ) a = true;
    else a = false;
    // 
    if ( *y < JP.zoomYLL ) a = true;
    else a = false;
    

  • Administrator

    Mann kann das Resultat eines Vergleichs auch in einer boolschen Variable speichern, das ist kein Problem. Hättest du aber auch einfach probieren können.

    Die Vergleichsoperatoren sind nichts anderes als Funktionsaufrufe, welche einen bool zurückgeben.

    Grüssli



  • Hi Dravere,

    dass das so funktioniert habe ich schon ausprobiert, meine Frage war mehr in die Richtung ob das erlaubt ist bzw. schlechter Programmierstil ist.



  • ich wüsste nich wieso das schlechter stil sein soll
    Wenn du eine Funktion schreibst wie zB

    bool is_greater(const T& a, const T& b){ return a>b; }
    

    nutzt du genau das selbe.


  • Administrator

    C++ Learner schrieb:

    dass das so funktioniert habe ich schon ausprobiert, meine Frage war mehr in die Richtung ob das erlaubt ist bzw. schlechter Programmierstil ist.

    Schlechter Stil? Nein. Das mache ich oft in GUIs zum Beispiel:

    bool isEnabled = selection >= 0 && selection < list.count();
    
    m_butA->enable(isEnabled);
    m_butB->enable(isEnabled);
    m_butC->enable(isEnabled);
    

    Grüssli



  • C++ Learner schrieb:

    meine Frage war mehr in die Richtung ob das erlaubt ist bzw. schlechter Programmierstil ist.

    int a, b, c;
    [...]
    a = (b > c);
    

    ob 'int a' hier das gelbe vom Ei ist, darüber kann man schon diskutieren.



  • C++ Learner schrieb:

    schlechter Programmierstil ist.

    Das ist sogar guter Programmierstil.



  • Bashar schrieb:

    Das ist sogar guter Programmierstil.

    Finde ich auch.

    a = (b > c);
    

    ist für mich nicht weniger übersichtlich als

    if (b > c) a = true; 
    else a = false;
    

    wobei ich die zweite Variante so nie verwende. Abgesehen von der Redundanz gefallen mir auch die Einzeiler nicht, das finde ich eher wieder unübersichtlicher.

    In gewissen Kontexten kannst du auch den operator?: anstelle von if -Abfragen einsetzen; zum Beispiel, wenn eine Bedingung gleich in einem grösseren Ausdruck geprüft werden soll.


Log in to reply