T-Rex: 2 Zuweisungen vs if else

Moin,

kurze Frage, was ist besser und wieso?

variable = "inhalt1";  
if( dings )  
{  
    variable = "inhalt2";  
}  

oder

if( dings )  
{  
    variable = "inhalt2";  
} else {  
    variable = "inhalt1";  
}  

Gruß
entweder T- oder Rex

  1. Hi Rex,

    bei der Fehlersuche ist das 2. besser ;-)
    Viele Grüße aus LA

    --
    ralphi
    1. bei der Fehlersuche ist das 2. besser ;-)

      Hab mich verkuckt:
      meinte bei

      if( dings )  
      {  
          variable = "inhalt2";  
      }  
      if( dings2 )  
          variable = "inhalt1";  
      }
      

      für Unsichtbare Zeichen und co. bei dings

      Viele Grüße aus LA

      Viele Grüße aus LA

      --
      ralphi
  2. Tach!

    kurze Frage, was ist besser und wieso?

    variable = ding ? "inhalt1" : "inhalt2";

    Eine Zeile. Man sieht (ich sehe) sofort, "variable wird in Abhängigkeit von dings gesetzt". Die anderen Schreibweisen sind nicht nur umständlicher zu schreiben, auch zu lesen. "In Abhängigkeit von dings wird mal dies und mal das gemacht. Dies und das ist aber dasselbe nur mit anderem Inhalt."

    Besonders wenn variable ein längeres Gebilde à la document.getElementById("blafasel").value ist, muss man nicht schauen, ob
    document.getElementById("blafasel").value
    und
    document.getElementById("blafesal").value
    wirklich dasselbe ist oder nicht doch was anderes.

    dedlfix.

  3. Hi,

    kurze Frage, was ist besser und wieso?

    ich bevorzuge das:

    $variable = (dings ? "inhalt2" : "inhalt1");

    Warum? - Weil ich so auf den ersten Blick sehe: Es erfolgt in jedem Fall eine Zuweisung.
    Ansonsten, wenn's wirklich als if-Statement geschrieben werden soll, würde ich die if-else-Variante empfehlen.

    Die andere Variante (Defaultwert setzen, Bedingung abprüfen, ggf. Wert neu setzen) kenne ich vor allem aus der Assembler-Programmierung.

    Ciao,
     Martin

    --
    Die letzten Worte des Polizisten:
    Ich hab mitgezählt, Leute: Sechs Schuss, jetzt hat er keine Munition mehr!
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Das doofe an der ? : Struktur ist, dass sie nicht erweiterbar ist.
      Falls doch noch was in das if kommt schreibt man es einfach rein.
      Das ist auch ein Grund warum ich auch bei einzeiligen if statements immer die Klammern {} setze.

      Gruß
      {T-Rex}

      1. Das doofe an der ? : Struktur ist, dass sie nicht erweiterbar ist.

        Es ist nicht unbedingt leicht lesbar aber

        x = dings1 ? "wert1" : (dings2 ? "wert2" : "wert3");

        x = dings1 ? "wert1" : (dings2 ? "wert2" : (dings3 ? "wert3" : "wert4"));

        Ist auch ein bisschen Sache der Gewohnheit.

        Grüße

        • Steffen

        PS
        Ich habe festgestellt, dass sich hier Javascript und PHP in der Zuweisung ohne Klammerung unterscheiden. Deswegen auf die Klammern achten oder mal ausprobieren, was wann passiert.

        1. PS

          x = dings1 ? "wert1" :
               (dings2 ? "wert2" :
                 (dings3 ? "wert3" : "wert4"));

          Umbrüche würden IMO die Lesbarkeit erhöhen.

          Grüße

          • Steffen
      2. Tach!

        Das doofe an der ? : Struktur ist, dass sie nicht erweiterbar ist.

        Das ist für dich ein Grund, generell auf die leichtere Lesbarkeit bei der Zuweisung zu verzichten? Selbst wenn YAGNI?

        Falls doch noch was in das if kommt schreibt man es einfach rein.

        Es käme mir dann darauf an, was da genau kommt. Dementsprechend entscheide ich, ob ein if mit oder ohne else nach der ?:-Zuweisung kommt oder nur ein if-else und darin dann die beiden Zuweisungen an dieselbe Variable.

        Um deine Ausgangsfrage zu beantworten, bei Variante 1 führst du im Zweifelsfall zwei Zuweisungen aus, bei Variante 2 immer nur eine. Der Zeitunterschied geht wohl meist im Grundrauschen unter.

        dedlfix.

  4. variable = "inhalt1";

    if( dings )
    {
        variable = "inhalt2";
    }

      
    Das ist schon aus Programmierersicht unschön. Sieht aus als hätte jemand nicht aufgepasst und nicht verstanden dass die erste Zuweisung evtl. wieder überschrieben wird. Wenn dann noch ein Objekt neu erzeugt und gleich wieder überschrieben wird ists noch krimineller. Bei mir lässt das die Alarmglocken läuten.  
      
    Aus Sicht der Ausführung könnte man jetzt mit dem einen Sprungbefehl argumentieren den man bei if-else immer mehr hat. Aber die Zeit die ich oder sonst jemand beim durchlesen dieses Codes hängenbleibt und sich Fragen stellt, die holt ja auch kein gesparter Sprungbefehl wieder rein.