<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hier goto sinnvoll?]]></title><description><![CDATA[<p>Ich habe folgende Schleife:</p>
<pre><code class="language-cpp">while(objectsToSet &gt; 0 &amp;&amp; tries &gt; 0) {
   // Test 1
   ...

   // Test 2

   // Test 3

   ...

   success();

}
</code></pre>
<p>Die Schleife versucht in jedem Durchlauf ein Objekt zu setzen. Solange es noch zu setzende Objekte gibt oder solange die Anzahl bleibender Versuche (tries) größer Null ist, läuft die Schleife.<br />
Im Rumpf finden nun viele Tests statt und nur wenn ALLE Tests bestanden sind, wird success() aufgerufen. Das Problem: Immer wenn irgendwo ein Test fehlt schlagt, muss ich das selbe machen:</p>
<pre><code class="language-cpp">tries--;
continue;
</code></pre>
<p>sprich Anzahl der Versuche dekrementieren und Schleife neu starten. Das wird langsam lästig und ich dachte mir, ob nicht vllt folgendes besser wäre: Am Schleifenende ein label definieren:</p>
<pre><code class="language-cpp">testFailed:
    tries--;
</code></pre>
<p>und wann immer ein Test fehlschlägt, mache ich ein goto testFailed. Wäre das ok?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276332/hier-goto-sinnvoll</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 10:18:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276332.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 Oct 2010 13:12:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hier goto sinnvoll? on Sun, 31 Oct 2010 13:12:19 GMT]]></title><description><![CDATA[<p>Ich habe folgende Schleife:</p>
<pre><code class="language-cpp">while(objectsToSet &gt; 0 &amp;&amp; tries &gt; 0) {
   // Test 1
   ...

   // Test 2

   // Test 3

   ...

   success();

}
</code></pre>
<p>Die Schleife versucht in jedem Durchlauf ein Objekt zu setzen. Solange es noch zu setzende Objekte gibt oder solange die Anzahl bleibender Versuche (tries) größer Null ist, läuft die Schleife.<br />
Im Rumpf finden nun viele Tests statt und nur wenn ALLE Tests bestanden sind, wird success() aufgerufen. Das Problem: Immer wenn irgendwo ein Test fehlt schlagt, muss ich das selbe machen:</p>
<pre><code class="language-cpp">tries--;
continue;
</code></pre>
<p>sprich Anzahl der Versuche dekrementieren und Schleife neu starten. Das wird langsam lästig und ich dachte mir, ob nicht vllt folgendes besser wäre: Am Schleifenende ein label definieren:</p>
<pre><code class="language-cpp">testFailed:
    tries--;
</code></pre>
<p>und wann immer ein Test fehlschlägt, mache ich ein goto testFailed. Wäre das ok?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973094</guid><dc:creator><![CDATA[gotoFrage]]></dc:creator><pubDate>Sun, 31 Oct 2010 13:12:19 GMT</pubDate></item><item><title><![CDATA[Reply to Hier goto sinnvoll? on Sun, 31 Oct 2010 13:19:50 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig sehe, wird tries immer dekrementiert, egal ob die Tests nun positiv oder negativ ausfallen. Dann kannst du tries direkt am Anfang der Schleife dekrementieren und kannst nach nem fehlgeschlagenen Test einfach continue sagen.</p>
<p>Außerdem würde ich dir empfehlen, logisch zusammenhängende Tests sinnvoll zu Funktionen zusammenzufassen. Das erhöht erstens die Lesbarkeit und zweitens löst es automatisch dein goto-Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973100</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 31 Oct 2010 13:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Hier goto sinnvoll? on Sun, 31 Oct 2010 13:39:52 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Wenn ich das richtig sehe, wird tries immer dekrementiert, egal ob die Tests nun positiv oder negativ ausfallen. Dann kannst du tries direkt am Anfang der Schleife dekrementieren und kannst nach nem fehlgeschlagenen Test einfach continue sagen.</p>
</blockquote>
<p>Da hast du recht.</p>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Außerdem würde ich dir empfehlen, logisch zusammenhängende Tests sinnvoll zu Funktionen zusammenzufassen. Das erhöht erstens die Lesbarkeit und zweitens löst es automatisch dein goto-Problem.</p>
</blockquote>
<p>Also für größere Tests hab ich bereits Funktionen, aber manche Tests sind nur eine kleine Schleife (3-4 Zeilen, da lohnt sich eigentlich keine extra Funktion mit ihrem Overhead). Das Problem ist jetzt, wenn ich in so einer inneren Schleife bin und merke, dass der Test fehlgeschlagen ist. Also sowas:</p>
<pre><code class="language-cpp">while(objectsToSet &gt; 0 &amp;&amp; tries &gt; 0) {
   // Test 1
   ...

   // Test 2

   for(int i=0; i &lt; 10; i++) {
       if(..) {
          // Zeile A: Test fehlgeschlagen! Er soll sofort mit einem neuen 
          // Durchlauf der ÄUSSEREN Schleife beginnen)
       }
   }

   ...

   success();

}
</code></pre>
<p>In Zeile A weiß ich z.B., dass der Test fehl schlug und er soll sofort mit einem neuen Durchlauf der äußeren Schleife beginnen. Ein continue geht da ja nicht, da ich in einer inneren Schleife bin. Ich bräuchte im Grunde ein neues Keyword, sowas wie &quot;outercontinue&quot;, dass er aus allen Schleifen ausbricht und einen neuen Durchlauf der äußersten beginnt. Hm..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973113</guid><dc:creator><![CDATA[gotoFrage]]></dc:creator><pubDate>Sun, 31 Oct 2010 13:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Hier goto sinnvoll? on Sun, 31 Oct 2010 13:51:22 GMT]]></title><description><![CDATA[<p>Du solltest deine Funktionen kürzer halten. Auch kleine Tests verdienen oft einen eigenen Namen und mehrere logisch zusammenhängende Tests können zu einer größeren Testfunktion zusammengefasst werden. Überleg dir mal, wie du deinen Code in Zukunft betrachten wirst: Wenn du dir diese Schleife nochmal durchliest, willst du eigentlich nur wissen, <em>was</em> getestet wird und nicht, <em>wie</em> getestet wird. Da bietet es sich doch an, auch kleinere Schleifen in ne extra Funktion zu packen, die du dir nach ausführlichem Testen nie wieder anzuschauen brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973121</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 31 Oct 2010 13:51:22 GMT</pubDate></item></channel></rss>