Ankündigung

Einklappen
Keine Ankündigung bisher.

IF mit oder ohne ELSE

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • IF mit oder ohne ELSE

    Bei meinen ersten Sprachen kannte das IF keinen ELSE-Zweig. Ich hatte daher (hier in PHP-Syntax dargestellt) immer statt:

    a)
    PHP-Code:
    if ( $a == ) {
      
    $b 'dies';
    } else {
      
    $b 'das';

    (Gelesen als: Wenn $a gleich 1 ist, dann setze $b auf 'dies', ansonsten setze $b auf 'das'.)

    diese Konstruktion wählen müssen:

    b)
    PHP-Code:
    $b 'das';
    if ( 
    $a == ) {
      
    $b 'dies';

    (Gelesen als: Setze $b auf 'das'. Aber wenn $a = 1 ist, nur dann setze $b auf 'dies')

    Die zweite Konstruktion gefällt mir heute eigentlich immer noch besser, vor allem dann, wenn der ja-Zweig etwas umfangreicher ist.

    Frage an die Anwesenden: Was spricht für a) und was für b) bzw. dagegen?
    PHP-Code:
    if ($var != 0) {
      
    $var 0;



  • #2
    Dagegen spricht, dass falls du den JA-Zweig wählst er beide Zweige ausführt, also insgesamt mehr zum rechnen hat.
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Für b) spricht, dass man damit einen Default-Fall übersichtlicher abbilden kann. Kontra a) wurde ja schon genannt.

      Ich bin auch oft geneigt b) zu benutzen, tue es dann aber aus genanntem Grund nicht.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Für a) und gegen b) spricht, dass du vielleicht nicht immer nur so „primitive“ Aktionen hast, wie einer Variablen einen festen Wert zuzuweisen.
        Vielleicht willst du stattdessen das Ergebnis aufwendiger Funktionen/Berechungen zuweisen - die eine davon erst zu machen, obwohl sie gar nicht gebraucht wird, wäre aber unperformanter Unfug.

        Und das
        PHP-Code:
        if(bedingung erfüllt) {
          
        lösche_datensatz();
        }
        else {
          
        update_datensatz();

        wäre in der Form
        PHP-Code:
        lösche_datensatz();
        if(!
        bedingung erfüllt) {
          
        update_datensatz();
        }

        // oder
        update_datensatz();
        if(
        bedingung erfüllt) {
          
        lösche_datensatz();

        auch ziemlich sinnfrei.

        Kommentar


        • #5
          Wenn ich nur sowas habe wie einfache Zuweisungen dann mache ich es auch wie bei dir in B. Z.B.
          PHP-Code:
          $id 0;
          if (isset(
          $_POST['id'])) {
            
          $id $_POST['id'];

          Aber du solltest halt immer schauen was du machst. Sollte die Zeile vor dem IF eine aufwendige Funktionaufruft oder eine DB Abfrage verlangt, dann solltest du das natürlich nicht machen. Einfache Zuweisungen finde ich aber ok (und einfacher/schöner).

          Kommentar


          • #6
            Alle sind sie schneller ... is euch nich heiß?

            Kommentar


            • #7
              Bei diesen Temperaturen kommen unsere Gehirne gerade mal auf Betriebstemperatur.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Ich meinte hier tatsächlich nur, wie man einen Wächter setzt, der im Normalzustand auf z.B. 0 steht, und der bei einer komplexen Bedingung z.B. 1 wird.

                Performance im Nanosekundenbereich hat mich noch nie groß gekümmert. Ich weiß aus Erfahrung, dass Lesbarkeit von Code über alles geht.

                Das Beispiel aus #4 kann man, will man ELSE nicht nutzen, auch mit Wächtern/Schaltern gestalten:

                PHP-Code:
                $flag 1;
                if ( 
                bedingung $flag 2;

                if ( 
                $flag == ) {
                  
                update();
                }
                if ( 
                $flag == ) {
                  
                delete();

                Hier würde ich aber dennoch die if/else - oder vielleicht auch eine switch-Konstruktion wählen - das sieht dann wesentlich einfacher aus.
                PHP-Code:
                if ($var != 0) {
                  
                $var 0;

                Kommentar


                • #9
                  Naja... bei sowas ist ein elseif sicherlich Performancetechnisch besser, da er ja sonst jede Abfrage durchgeht und beim elseif ja gar nicht mehr schaut, wenn eine der vorherigen Abfragen schon Positiv war.
                  "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                  Kommentar


                  • #10
                    Ist aber so gut wie immer vernachlässigbar wie Wolla schon sagt. $flag == 1, $flag == 2 ... das kostet dich keine "Performance".

                    Problem ist nur if (db_abfrage() == 5) oder sowas, dann muss natürlich in jeder Abfrage ein "teurer" Code ausgeführt werden.

                    Kommentar


                    • #11
                      Ist aber so gut wie immer vernachlässigbar wie Wolla schon sagt. $flag == 1, $flag == 2 ... das kostet dich keine "Performance".
                      Hmm, ich finde diesen Ansatz falsch. Wenn es ein else gibt oder eben Wächtercode, dann soll man das auch nutzen. Ohne break/return o.ä. sind zwei IF nacheinander kein Wächtercode! Hier werden mutwillig zwei (oder mehr) Prüfungen vorgenommen, auch wenn dafür u.U. kein Bedarf besteht.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Das war kein Ansatz sondern der Performancevergleich. Ich denke else-if ist dort sinnvoll wo es halt hin passt Oben würde ich auf definitiv nen else-if nehmen. Nur ist es meiner Meinung nach nicht Grundsätzlich schlecht die Dinge aufzutrennen wenn es damit eine bessere Übersicht gibt.

                        Kommentar

                        Lädt...
                        X