For-Schleife soll warten



  • 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...



  • Michael E. schrieb:

    Jaja, wenn man Beispiele absichtlich nicht versteht...

    Das musst du mir jetzt aber genauer erleutern.



  • Ein Beispiel soll dir lediglich einen Gedankenschubs in die richtige Richtung geben. Du kannst dir sicherlich, ausgehend von volkards Beispiel, Szenarien überlegen mit mehr als zwei Bedingungen, die etwas länger sind und nicht notwendigerweise hintereinanderstehen müssen, sodass man nicht einfach so alle Bedingungen übersichtlich in ein if bekommt.



  • Ob da nun steht:

    if(iwas) continue;
        // Code
    

    oder

    if(!iwas)
        // Code
    

    ist meiner Meinung nach relativ egal. Du kannst mir aber gerne ein Gegenbeispiel zeigen.



  • while(true)
    {
    	if(foo())
    		continue;
    	if(bar())
    	{
    		++counter;
    		continue;
    	}
    	if(bar())
    		continue;
    	baz();
    	baz();
    }
    
    while(true)
    {
    	if(!foo())
    	{
    		if(bar())
    			++counter;
    		else
    		{
    			if(!bar)
    			{
    				baz();
    				baz();
    			}
    		}
    	}
    }
    


  • Michael E. schrieb:

    while(true)
    {
    	if(foo())
    		continue;
    	if(bar())
    	{
    		++counter;
    		continue;
    	}
    	if(bar())
    		continue;
    	baz();
    	baz();
    }
    
    while(true)
    {
    	if(!foo())
    	{
    		if(bar())
    			++counter;
    		else
    		{
    			if(!bar)
    			{
    				baz();
    				baz();
    			}
    		}
    	}
    }
    

    Beides nichtssagend und hässlich


Anmelden zum Antworten