For-Schleife soll warten



  • Dellikovski schrieb:

    for(int i = 0; i <= a.size(); i++)
    {
           if(a[i] == 20)
           {
                  //tu etwas
           } else {
                  // Schleife sofort beenden!
                  break;
           }
    }
    


  • for(int i = 0; i <= a.size() && a[i] == 20; i++)
    {
                  //tu etwas
    
    }
    


  • Ok Danke, aber wenn ich ein paar Rechnungen in dieser For-Schleife machen möchte und ein bestimmtes Ergebnis "rausfiltern" möchte, also das mit diesem Ergebnis nicht mehr weitergemacht wird, dann hilft mir z.B. die break-Möglichkeit nicht mehr viel, weil die Schleife soll ja dann weitergehen.


  • Mod

    Dellikovski schrieb:

    Ok Danke, aber wenn ich ein paar Rechnungen in dieser For-Schleife machen möchte und ein bestimmtes Ergebnis "rausfiltern" möchte, also das mit diesem Ergebnis nicht mehr weitergemacht wird, dann hilft mir z.B. die break-Möglichkeit nicht mehr viel, weil die Schleife soll ja dann weitergehen.

    Dann continue . Oder einen if-Block um die zu vermeidende Rechnung.



  • Dellikovski schrieb:

    Ok Danke, aber wenn ich ein paar Rechnungen in dieser For-Schleife machen möchte und ein bestimmtes Ergebnis "rausfiltern" möchte, also das mit diesem Ergebnis nicht mehr weitergemacht wird, dann hilft mir z.B. die break-Möglichkeit nicht mehr viel, weil die Schleife soll ja dann weitergehen.

    for(int i = 0; i <= a.size(); i++)
    {
           if(a[i] == 20)
           {
                  //tu etwas
           } 
    }
    

    Wenn du die Schleife BEENDEN willst, dann break. Wenn du nur den Wert nich verwenden willst, also a[i] nicht 20 ist, dann mach einfach nix^^.



  • HighLigerBiMBam schrieb:

    Es gibt "continue" aber man sollte es vermeiden. Poste mal deine Schleife.

    Warum sollte man es vermeiden?



  • Weil es hübscher ist, wenn die Schleife durch den Kopf gesteuert wird und im Rumpf die Operationen auf den Elementen statt finden. In vielen Fällen benötigt man es halt trotzdem und dann ist das eben auch ok.

    Ich überlege gerade an einem Beispiel, wo man es unnötigerweise nutzen könnte... Wenn es nicht am Ende steht, lässt es sich schlecht in den Schleifenkopf verlagern im Ggs. zu break.



  • "break" lässt sich oft nicht vermeiden zu verwenden, aber bei "continue" reicht es aus einfach nur nichts zu machen, weshalb ich finde, es ist ein sinnloses goto mit anderem Namen 😉



  • HighLigerBiMBam schrieb:

    "break" lässt sich oft nicht vermeiden zu verwenden, aber bei "continue" reicht es aus einfach nur nichts zu machen, weshalb ich finde, es ist ein sinnloses goto mit anderem Namen 😉

    continue ist aber oft besser, als die Verschachtelungstiefe zu erhöhen.



  • HighLigerBiMBam schrieb:

    "break" lässt sich oft nicht vermeiden zu verwenden, aber bei "continue" reicht es aus einfach nur nichts zu machen, weshalb ich finde, es ist ein sinnloses goto mit anderem Namen 😉

    Also meine continues sind normalerweise nicht so einfach gestrickt, dass das gehen würde.



  • volkard schrieb:

    HighLigerBiMBam schrieb:

    "break" lässt sich oft nicht vermeiden zu verwenden, aber bei "continue" reicht es aus einfach nur nichts zu machen, weshalb ich finde, es ist ein sinnloses goto mit anderem Namen 😉

    continue ist aber oft besser, als die Verschachtelungstiefe zu erhöhen.

    Und was findest Du hier besser? Lesbarkeit?



  • Eisflamme schrieb:

    volkard schrieb:

    HighLigerBiMBam schrieb:

    "break" lässt sich oft nicht vermeiden zu verwenden, aber bei "continue" reicht es aus einfach nur nichts zu machen, weshalb ich finde, es ist ein sinnloses goto mit anderem Namen 😉

    continue ist aber oft besser, als die Verschachtelungstiefe zu erhöhen.

    Und was findest Du hier besser? Lesbarkeit?

    Ja.



  • Und Einfachheit. Man muss den Code nicht unnötig kompliziert machen, nur um irgendeine fragwürdige Regel zu befolgen.



  • Ich nutze es gerne, um vor der eigentlichen Verarbeitung einen Test zu machen:

    while(getline(in,line))
    {
       if(line.count()==0) continue;
       if(line[0]=='#') continue;
       //erst hier die zeile ernsthaft anschauen
    }
    

    Konstrukte mit tiefer Verschachtelung

    while(getline(in,line))
    {
       if(line.count()!=0)
       {
          if(line[0]!='#')
          {
             //erst hier die zeile ernsthaft anschauen
          }
       }
    }
    

    mag ich da gar nicht. Zumal ein Umbasteln der Vortests grausam wird.

    Mit elseif und doNothing() würde es zur Not gehen, aber continue sieht hier auch aussagekräftiger aus.
    Man kann den ganzen Funktionskörper in eine Funktion auslagern und statt continue return verwenden. Ob das angemessen ist, muß man im Einzelfall entscheiden.

    Mit diesen Verschachtelungen habe ich mal was Lustiges erlebt. Hardware sollte angesteuert werden. Dauernd so hin-und-her-Protokollgeschichten, Bit setzen, auf Antwort warten, Wort schreiben, Bestätigung abwarten...
    Der Vorgänger hatte mit C sehr tief geschachtelt. Das war so grausam zu lesen, daß der Arbeitgeber mir verboten hatte, C zu nehmen. Ich solle doch lieber assembler schreiben.



  • while(getline(in,line))
    {
       if(line.count()!=0)
       {
          if(line[0]!='#')
          {
             //erst hier die zeile ernsthaft anschauen
          }
       }
    }
    

    lässt sich auch als

    while(getline(in,line))
    {
       if(line.count() && line[0]!='#')
       {
           //erst hier die zeile ernsthaft anschauen
       }
    }
    

    schreiben 😉



  • volkard schrieb:

    Mit diesen Verschachtelungen habe ich mal was Lustiges erlebt. Hardware sollte angesteuert werden. Dauernd so hin-und-her-Protokollgeschichten, Bit setzen, auf Antwort warten, Wort schreiben, Bestätigung abwarten...
    Der Vorgänger hatte mit C sehr tief geschachtelt. Das war so grausam zu lesen, daß der Arbeitgeber mir verboten hatte, C zu nehmen. Ich solle doch lieber assembler schreiben.

    Wenn Kompetenz auf unglaubliches Fachwissen trifft, passiert sowas. Und jetzt hast du ein tiefsitzendes psychisches Trauma und vermeidest jede Verschachtelung, weil du angst hast, dein (ehemaliger?) Arbeitgeber könnte kommen und dir C++ wegnehmen.



  • Eisflamme schrieb:

    HighLigerBiMBam schrieb:

    "break" lässt sich oft nicht vermeiden zu verwenden, aber bei "continue" reicht es aus einfach nur nichts zu machen, weshalb ich finde, es ist ein sinnloses goto mit anderem Namen 😉

    Also meine continues sind normalerweise nicht so einfach gestrickt, dass das gehen würde.

    Da es du bist, kann man annehmen, dass die Schleifen mehr als 50 Zeilen haben und der Code sowieso für die Tonne ist.



  • Mis2com?

    Mehr als 50 Zeilen selten. Und mein Code ist gut lesbar, kommentiert, performant und funktioniert. Wenn Du also Dinge von Qualität in die Tonne schmeißt, weiß ich ja Bescheid, wie es bei Dir aussieht. :p



  • Eisflamme schrieb:

    Mehr als 50 Zeilen selten. Und mein Code ist gut lesbar, kommentiert, performant und funktioniert.

    Hat das schon mal ein anderer als du bestätigt?
    Gerade vorher hast du noch übrigens behauptet deine continue wären kompliziert.



  • 314159265358979 schrieb:

    while(getline(in,line))
    {
       if(line.count()!=0)
       {
          if(line[0]!='#')
          {
             //erst hier die zeile ernsthaft anschauen
          }
       }
    }
    

    lässt sich auch als

    while(getline(in,line))
    {
       if(line.count() && line[0]!='#')
       {
           //erst hier die zeile ernsthaft anschauen
       }
    }
    

    schreiben 😉

    Jaja, wenn man Beispiele absichtlich nicht versteht...


Anmelden zum Antworten