nachziehende spaces entfernen



  • Original erstellt von HumeSikkins:
    Einen Satz wie "tja, wer den ternären Operator nicht versteht, der sollte schleunigst ein gutes Buch zur Hand nehmen und an seinem Verständnis arbeiten" aber dafür ganz bestimmt.

    Ich kann dich dahingehend beruhigen, daß ich den ?: durchaus kenne.

    Und ich sehr wirklich nicht, warum ein

    if (p == string::npos)
        return Elefant;
    else
       return Huhn;
    

    in irgendeiner Form besser zu lesen sein soll, als ein:

    return p == string::npos ? Elefant : Huhn;
    

    Ganz im Gegenteil.

    Ich aber. Im einen Fall hat man Entscheidung und zwei Tätigkeiten in drei hübsch getrennten Zeilen und im anderen Fall hat man alles auf eine Zeile kompremiert, die in sich keine die lesbarkeit verbesserne unterteilunngen hat, und die man erst zerlegen kann, wenn man mit dem lesen schon bis zum ? gestoßen ist.

    Der ternäre Operator hat IMO einen Sinn.
    Ist für mich wie mit dem i = i+1 vs. ++i (bzw. i++)

    Der ?: hat eher historischen Sinn. Es gab mal ne Zeit, da mußte man viel in Ausdrücken unterbringen, weils keine inline-Funktionen gab. Wir erinnern uns alle gerne an #define max(a,b) ((a)>(b)?(a):(b)).



  • Original erstellt von volkard:
    Im einen Fall hat man Entscheidung und zwei Tätigkeiten in drei hübsch getrennten Zeilen und im anderen Fall hat man alles auf eine Zeile kompremiert, die in sich keine die lesbarkeit verbesserne unterteilunngen hat, und die man erst zerlegen kann, wenn man mit dem lesen schon bis zum ? gestoßen ist.

    Andersrum. Bei einem 'if' wird auf das (optionale) 'else' (gefolgt von einem weiteren optionalen 'if' ...) überhaupt kein Bezug genommen. Der ?:-Operator ist genau für den Spezialfall da, dass der zweite und der dritte Operand 'irgendetwas' gemeinsam haben und von einer gemeinsamen Bedingung abhängen.



  • Ich kann dich dahingehend beruhigen, daß ich den ?: durchaus kenne.

    Glaub mir, dass würde ich *niemals* bezweifeln.

    Der ?: hat eher historischen Sinn.

    Das hingegen sehe ich anders. Die Möglichkeiten Bedingungen in Ausdrücken einzubauen braucht man gerade in C++ nach wie vor sehr häufig (const-, reference-Initialisierung, Bedingungen in der Initialisierungsliste usw.)
    Und für Situationen wie "gib einem X einen von genau zwei möglichen Werten abhängig vom Wahrheitswert der Bedingung B" ist der :? meiner Meinung nach einfach das ausdrucksstärkste Sprachelement.

    Im einen Fall hat man Entscheidung und zwei Tätigkeiten in drei hübsch getrennten Zeilen und im anderen Fall hat man alles auf eine Zeile kompremiert, die in sich keine die lesbarkeit verbesserne unterteilunngen hat, und die man erst zerlegen kann, wenn man mit dem lesen schon bis zum ? gestoßen ist.

    Das gilt IMO nicht. Erstens kann ich auch den ?:-Code auf mehrere Zeilen verteilen und zweiten muss ich beim if bis zur schließenden Klammer lesen.

    if (p == string::npos) return Elefant; else return Huhn;
    
    return p == string::npos ? 
           Elefant 
           : Huhn;
    

    Sehe da keinen Unterschied.
    Einmal suche ich nach einem ? und einem Doppelpunkt und einmal nach einem if (+ schließende Klammer) und einem else.



  • Ich find das ist eine Diskussion gar nicht wert 😉



  • Original erstellt von HumeSikkins:
    **Es reicht ein if, ein else ist unnötig.

    void trimright(std::string& t)
    {
      size_t p = t.find_last_not_of(" \t");
      if (p < t.length())
          t.erase(++p);
    }
    

    **

    Da passiert bei " " allerdings nichts, was ich als unpraktisch empfunden habe.

    Meine Funktion schaut nun so aus:

    void trimright(std::string& t)
    {
      size_t p = t.find_last_not_of(" \t");
      t.erase( p==string::npos ? 0 : p+1 );
    }
    

    Finde ich besser zu lesen als ein if/else.



  • Original erstellt von HumeSikkins:
    **Das gilt IMO nicht. Erstens kann ich auch den ?:-Code auf mehrere Zeilen verteilen und zweiten muss ich beim if bis zur schließenden Klammer lesen.
    **

    normale

    return x == string::npos;
    

    bin ich ja gewohnt und deswegen beim darauffolgenden '?' immer erschreckt.

    am if und der einrückung sehe ich gleich, daß es ein if mit else ist und ich seh auch gleich, daß da nur zwei returns sind. von syntax-highlighting gehe ich natürlich aus. damit ist die struktur schonmal klar.

    bei

    return x == bla (aus den augenwinkeln noch viele sachen gesehen)
    

    weiß ich noch gar nix biß zum bewußten lesen des '?'. könnte ja auch return x == bla * 5 / 12; heißen. erst nach dem '?' wird mir die struktur klar.
    da erfasse ich aber ein syntaxgehighlightetes if/else mit zwei returns drin besser.



  • Klammern können die struktur auch sehr deutlich machen - sinnvoll gesetzt.


Anmelden zum Antworten