lieber for() oder while()

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

  • lieber for() oder while()

    Hi, wieder mal ne rein theoretische Frage, die mich mal spontan interessiert.

    Was macht eigentlich wann mehr Sinn? Eine for()-Schleife, oder doch lieber eine while()-Schleife?

    Vom Programmieraufwand ist ja beides nicht die Weld. Aber ich frage mich, einen Code wie den folgenden sollte man doch besser in for() machen, oder??
    PHP-Code:
    // $werte[0] enthält die Anzahl der Werte, danach kommen 
    // die einzelnen Werte, ist wie gesagt nur ein Bsp.
    $werte explode(";",$v[werte]);
    $i 1;
    while(
    $i <= $werte[0]) {
        echo 
    "$werte[$i]";
        
    $i++;
        } 
    Gibts sowas wie ne Fausregel, wann was anzuwenden ist?

  • #2
    in diesem fall würde ich lieber die for.schleife nehmen

    PHP-Code:

    // $werte[0] enthält die Anzahl der Werte, danach kommen 
    // die einzelnen Werte, ist wie gesagt nur ein Bsp.
    $werte explode(";",$v[werte]);
    for(
    $i=0;$i<count($werte);$i++) {
        echo 
    "$werte[$i]";

    ich finde, dass FOR bei klar definierten start- und endpunkten sinnvoller und übersichlicher ist.

    bei WHILE musst du dich um das hochzählen kümmern, so macht das FOR das.

    bei WHILE hast du aber den vorteil, dass man den counter auch wieder zurücksetzen kann, was bei FOR zwar auch gehen mag, aber aus meiner sicht nicht schön ist.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Das heißt, du siehst es auch nur als Geschmackssache an, so wie ichs halt auch die ganze Zeit gemacht hab.

      Bei so einfachen Schleifen macht es ja auch keinen unterschied, ob ich das $i++ in der Definition oder in der Schleife mach. Ist denn was bekannt, ob es in Sachen Performance irgendwann (ab einer bestimmten Größe) mal einen Unterschied gibt?

      Werde dann wohl mal lustig weiter schleifen, mit dem was mir gerade gefällt.

      Kommentar


      • #4
        performancemäßig könnte die whileschleife besser sein.

        was mir aber noch einfällt.

        [COLOR=red]eine FORschleife wird immer mindestens EINMAL durchlaufen.[/COLOR]

        [COLOR=red]eine WHILEschleife dagegen nur, wenn die bedinung stimmt. es kann also sein, dass der inhalt eine WHILEschleife nihct ausgeführt wird, wenn die bedingung FALSE ist.[/COLOR]

        das ist eignetlich der hauptunterschied beider schleifentypen.

        ausserdem ist while nicht angebracht, wenn du ein array ausgibst, welches entweder nicht durchweg sauber nummeriert ist. also 1,2,3,5,9,10,15 statt 1,2,3,4,5,...
        da fehlt ja sonst was bei der ausgabe. mit while kannst du den pointer ja irgendwie weiterschubsen, egal welcher index danach kommt.
        ausserdem kann man FOR nciht verwenden, wenn das array z.b. namentlich indiziert ist. also wert[nummereins] oder wert[nummerzwei] statt wert[1] und wert[2]
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          eine DO-WHILE schleife.... also

          do {

          }
          while (....)

          wird auch mindestens einmal durchlaufen. die abbruchbedingung muss erfüllt sein, zum stopp.

          jetz weiss ich aber auch grad nicht, ob die bei PHP vorhanden ist. die verwendet ja eh kaum jemand...
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            do war mir auch noch nicht bekannt, höchstens mal im "Vorbeigehen" gesehen.

            Aber ich werde mir deine Ratschläge mal zu Herzen nehmen. Bisjetzt lag ich ja dann zufällig immer richtig

            Auf jeden Fall n Fettes Dankeschön schon mal!

            Kommentar


            • #7
              Original geschrieben von Abraxax
              in diesem fall würde ich lieber die for.schleife nehmen

              PHP-Code:

              // $werte[0] enthält die Anzahl der Werte, danach kommen 
              // die einzelnen Werte, ist wie gesagt nur ein Bsp.
              $werte explode(";",$v[werte]);
              for(
              $i=0;$i<count($werte);$i++) {
                  echo 
              "$werte[$i]";

              ich finde, dass FOR bei klar definierten start- und endpunkten sinnvoller und übersichlicher ist.

              bei WHILE musst du dich um das hochzählen kümmern, so macht das FOR das.

              bei WHILE hast du aber den vorteil, dass man den counter auch wieder zurücksetzen kann, was bei FOR zwar auch gehen mag, aber aus meiner sicht nicht schön ist.
              in diesem Falle aber das count($werte) vor das for setzen, da sonst das count() bei jedem Durchlauf neu berechnet wird.

              Ich nehme For Schleifen wenn Start und Ende klar definiert ist,
              also zB 1-50.

              While Schleifen dann bei Dingen wo ich nicht weiß, wieviel ich habe,
              und mich der Counter ($i bei for(...)) nicht interessiert, also zB

              while($row=mysql_fetch_row(...))

              oder

              while(list(...)=each(...))
              TBT

              Die zwei wichtigsten Regeln für eine berufliche Karriere:
              1. Verrate niemals alles was du weißt!


              PHP 2 AllPatrizier II Browsergame

              Kommentar


              • #8
                @TobiaZ

                tja.
                wer in informatik aufpasst und nicht schwenzt, lernt auch was ...

                ist mir aber auch gerade erst wieder eingefallen. schliesslich nehme ich auch immer die beste alternativen beider schleifentypen....

                mal sehen, wer noch was dazu schreibt.

                bis dann
                Zuletzt geändert von Abraxax; 09.11.2002, 14:06.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  @TBT
                  mag sein, dass count() neu errechnet wird, aber es ändert sich nicht....
                  wäre höchstens für die performance sinnvoll.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    das count() bleibt doch gleich!?!
                    EDIT:
                    Zwei Idioten, ein Gedanke


                    @Abraxax:
                    Musste mich leider in der Sek1 zwischen Latein und Informatik entscheiden. Für die zweite Fremdsprache im Abi hab ich dann Latein genommen. Aber das macht keinen unterschied, da hab ich auch nichts gelernt.

                    Kommentar


                    • #11
                      tja. wer braucht schon latein ..
                      russisch ist da doch viel besser. vor allem lebt die sprache noch .
                      aber kann ich dennoch nix mehr ...
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Original geschrieben von Abraxax
                        [...]
                        ausserdem ist while nicht angebracht, wenn du ein array ausgibst, welches entweder nicht durchweg sauber nummeriert ist. also 1,2,3,5,9,10,15 statt 1,2,3,4,5,...
                        da fehlt ja sonst was bei der ausgabe. mit while kannst du den pointer ja irgendwie weiterschubsen, egal welcher index danach kommt.
                        ausserdem kann man FOR nciht verwenden, wenn das array z.b. namentlich indiziert ist. also wert[nummereins] oder wert[nummerzwei] statt wert[1] und wert[2]
                        Da kann man aber auch rumtricksen wenn man for benutzen will ... zum Beispiel fuer ein binaers BenutzerRechteSystem:

                        PHP-Code:
                        $userRights = array("LEVEL1"   => 0,   // 1
                                                         
                        "LEVEL2"   => 0,  // 2
                                                         
                        "LEVEL3" => 0// 4
                                                        
                        "LEVEL4" => 0,  // 8
                                                        
                        "LEVEL5" => 0);  // 16  

                        $rights 25;   // fuer level 1,4 und 5

                        for ($i 1$i <=16$i *= 2) {
                            if ( (
                        $rights $i) == $i) {
                                
                        $userRights[key($userRights)] = 1;
                            }
                            
                        next($userRights);

                        Mit While waere das auch nciht einfacher ...

                        Ich benutze auch meistens for ... halte ich fuer uebersichtlicher da schon in der ersten Zeile klar ist welches der Zaehler-Index ist, wie er erhoeht wird und wann die Schleife abbrechen soll.

                        Das jedoch eine for Schleife immer mindestens einmal durchlaufen (auch wenn die Bedingung nicht stimmt) wird halte ich fuer ein Geruecht ... denn dieses mini-script erzeugt KEINE ausgabe

                        PHP-Code:
                        <?php

                        for ($i 0$i 0$i++) {
                            echo 
                        $i;
                        }

                        ?>
                        und wenn ich mich recht entsinne ist das bei JAVA und C++ genauso.
                        Zuletzt geändert von BlobBanana; 09.11.2002, 15:01.

                        Kommentar


                        • #13
                          Würde auch ander eigentlich keinen Sinn machen. Warum sollte PHP just aus einer Laune raus auch bei unerfüllten Bedingungen etwas tun.

                          Kommentar


                          • #14
                            blobbanana, du sprichtst mir aus der seele

                            while und for sind wirklich im prinzip das gleiche, ausser, das halt while auch ohne auto inc funkt das wars auch schon (naja, for eigentlich auch nicht, lässt man halt leere bedingungen
                            also solche wie while($daten=mysql_fetch_array($resource)) {
                            }

                            macht man verständlicherweise lieber mit while,
                            meine Projekte bestaunen: http://www.kleiza.de

                            Kommentar


                            • #15
                              Man kann auch for ohne auto-inc verwenden wie dieses etwas sinnlose beispiel zeigt

                              PHP-Code:
                              <?php
                              $i 
                              0;
                              $bedingung true;

                              for (; 
                              $bedingung; ) {
                                  
                              $i += 1;
                                  if (
                              $i == 10) {
                                      
                              $bedingung false;
                                  }
                              }
                              echo 
                              $i;
                              ?>

                              Kommentar

                              Lädt...
                              X