<?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[Frage zum Stil]]></title><description><![CDATA[<p>Welchen von den drei Stilen würdet Ihr jeweils als am besten ansehen und warum?</p>
<p>Stil 1:</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (Bedingung)
	{
		TuWas;
		TuMehr;

		return true;
	}
	else
		return false;
}
</code></pre>
<p>Stil2:</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (!Bedingung)
		return false;
	else
	{
		TuWas;
		TuMehr;

		return true;
	}
}
</code></pre>
<p>Stil 3:</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (!Bedingung)
		return false;

	TuWas;
	TuMehr;

	return true;
}
</code></pre>
<p>----------</p>
<p>Stil 1:</p>
<pre><code class="language-cpp">void Funktion()
{
	if (Bedingung)
	{
		TuWas;
		TuMehr;
	}
	else
		throw Exception(&quot;Fehler&quot;);
}
</code></pre>
<p>Stil 2:</p>
<pre><code class="language-cpp">void Funktion()
{
	if (!Bedingung)
		throw Exception(&quot;Fehler&quot;);
	else
	{
		TuWas;
		TuMehr;
	}
}
</code></pre>
<p>Stil 3:</p>
<pre><code class="language-cpp">void Funktion()
{
	if (!Bedingung)
		throw Exception(&quot;Fehler&quot;);

	TuWas;
	TuMehr;
}
</code></pre>
<p>P.S.: Es geht nur darum, die Stile jeweils untereinander zu vergleichen. Es geht hier nicht um den Vergleich Rückgabewert vs. Exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225745/frage-zum-stil</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 09:29:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225745.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Oct 2008 11:34:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 11:34:35 GMT]]></title><description><![CDATA[<p>Welchen von den drei Stilen würdet Ihr jeweils als am besten ansehen und warum?</p>
<p>Stil 1:</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (Bedingung)
	{
		TuWas;
		TuMehr;

		return true;
	}
	else
		return false;
}
</code></pre>
<p>Stil2:</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (!Bedingung)
		return false;
	else
	{
		TuWas;
		TuMehr;

		return true;
	}
}
</code></pre>
<p>Stil 3:</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (!Bedingung)
		return false;

	TuWas;
	TuMehr;

	return true;
}
</code></pre>
<p>----------</p>
<p>Stil 1:</p>
<pre><code class="language-cpp">void Funktion()
{
	if (Bedingung)
	{
		TuWas;
		TuMehr;
	}
	else
		throw Exception(&quot;Fehler&quot;);
}
</code></pre>
<p>Stil 2:</p>
<pre><code class="language-cpp">void Funktion()
{
	if (!Bedingung)
		throw Exception(&quot;Fehler&quot;);
	else
	{
		TuWas;
		TuMehr;
	}
}
</code></pre>
<p>Stil 3:</p>
<pre><code class="language-cpp">void Funktion()
{
	if (!Bedingung)
		throw Exception(&quot;Fehler&quot;);

	TuWas;
	TuMehr;
}
</code></pre>
<p>P.S.: Es geht nur darum, die Stile jeweils untereinander zu vergleichen. Es geht hier nicht um den Vergleich Rückgabewert vs. Exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604125</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Fri, 24 Oct 2008 11:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 12:09:29 GMT]]></title><description><![CDATA[<p>Stil 3, vorausgesetzt die frühen returns sind deutlich gekennzeichnet. Das erleichtert die Lesbarkeit des Programmflusses. Soll heißen: wenn man Bedingungen hat die zu einem schnellen Ausstieg führen sollten die angeführt werden bevor der längere &quot;Hauptzweig&quot; der Ausführung kommt. Grade wenns mehrere solcher Ausstiegspunkte gibt, würd Version 2 eine tiefe Schachtelung ergeben (deshalb Hauptzweig nicht in else), und Version 1 eine tiefe Schachtelung plus einen schlechten Zusammenhang von Prüfung der Ausstiegsbedingung und Ausstiegspunkt. Bsp:</p>
<p>Version 1</p>
<pre><code class="language-cpp">int foo(char c)
{
  if (! Ausstiegsbedingung1)
  { //Hauptzweig...
    bla();
    //blubb...
    std::cout &lt;&lt; &quot;Schoenes Wetter heute...\n&quot;;
    if (! Ausstiegsbedingung2)
    { //weiter im Text...
      int blubb = foobar(23);
      //weiteres gefrickel, wichtige Ausgaben und sowas..

      if(! Ausstiegsbedingung3)
      {
         //noch ein bisschen rechnen...
         int wuppdich = 17*blubb + 3;
         return wuppdich;
      }
      else return -1; //wofür war das else noch gleich?
    }
    else throw std::exception(&quot;Das wars dann wohl...&quot;); //moment - die Exception kam durch welches if?
  }
  else return 0; // else wozu???? mal hochscrollen...
}
</code></pre>
<p>Version 3 dagegen:</p>
<pre><code class="language-cpp">int foo(char c)
{
  if (Ausstiegsbedingung1)
  {
    return 0;   //okay, weitere Berechnungen unnötig, also schluss
  }

  bla();
  //blubb...
  std::cout &lt;&lt; &quot;Schoenes Wetter heute...\n&quot;;

  if (Ausstiegsbedingung2)  //ah, ein Fehler, also Abbruch!
  {
    throw std::exception(&quot;Das wars dann wohl...&quot;);
  }

  int blubb = foobar(23);
  //weiteres gefrickel, wichtige Ausgaben und sowas..

  if(Ausstiegsbedingung3)
  {
    return -1;  //in dem Fall weiß man gleich was zurückgegeben werden muss also tut man das und spart sich den Rest...
  }

  //noch ein bisschen rechnen...
  int wuppdich = 17*blubb + 3;
  return wuppdich; //fertig :)
}
</code></pre>
<p>Viel übersichtlicher oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604139</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 24 Oct 2008 12:09:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 12:07:32 GMT]]></title><description><![CDATA[<p>Es kommt ein wenig auf die Situation drauf an. Wenn gleich zu Beginn gewissen Entscheidungen getroffen werden können, wodurch die Funktion bereits abbrechen kann, dann wähle ich den dritten Stil:</p>
<pre><code class="language-cpp">bool function()
{
  if(!Bedingung1 &amp;&amp; !Bedingung2 /* &amp;&amp; ... */)
  { return false; }

  /*
  Hier spare ich dadurch eine Einrückungsebene.
  Zudem habe ich so gleich die Pre-Bedingungen drin.
  */
}
</code></pre>
<p>Wenn die Sache allerdings etwas mehr verschachtelt ist und nur ein weg zum korrekten Ergebnis führt, dann verwende ich eine veränderte Form vom ersten Stil:</p>
<pre><code class="language-cpp">bool function()
{
  if(Bedingung1)
  {
    // ...
    if(Bedingung2)
    {
      // ...
      try
      {
         // ...
         return true;
      }
      catch(...)
      { /* ... */ }
    }
  }

  // Alles andere war falsch!
  return false;
}
</code></pre>
<p>Im allgemeinen verhalte ich mich einfach so, dass so viele <code>return</code> s wie nur möglich an den Beginn oder ans Ende der Funktion kommen.</p>
<p>Edit:<br />
Noch als Ergänzung zum Post von pumuckl. Wenn ich So viele Abbruchbedingungen in der Mitte der Funktion habe, dann weisst es mir meistens an, dass ich zu wenig Funktionen habe. Ich lagere dann gerne mal gewisse Überprüfungen und solches aus der eigentlichen Funktion aus.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604144</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 24 Oct 2008 12:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 12:06:39 GMT]]></title><description><![CDATA[<p>Abgesehen davon, dass ich etwas anders notieren würde (kein if ohne geschweifte Klammern!) kann ich mich pumuckl nur anschließen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604146</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 24 Oct 2008 12:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 12:08:44 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>(kein if ohne geschweifte Klammern!)</p>
</blockquote>
<p>Jo sorry, da hab ich gegen meine eigenen Konventionen verstoßen, aus purer Faulheit. Weils ein schlechtes Beispiel ist wirds sofort geändert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604149</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 24 Oct 2008 12:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 12:14:01 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>kein if ohne geschweifte Klammern!</p>
</blockquote>
<p>Ich handhabe das grundsätzlich so, dass ein <code>if</code> nur ohne geschweifte Klammern auskommen soll, wenn es entweder allein steht oder das zugehörige <code>else</code> ebenfalls nur eine Anweisung beinhaltet. Aber ein Gemisch in der gleichen Abfrage ( <code>if</code> - <code>else if</code> - <code>else</code> ) finde ich nicht schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604151</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Oct 2008 12:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Fri, 24 Oct 2008 12:24:28 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aber ein Gemisch in der gleichen Abfrage ( <code>if</code> - <code>else if</code> - <code>else</code> ) finde ich nicht schön.</p>
</blockquote>
<p>Da hast du vollkommen Recht, weniger schön geht nicht! Ich persönlich mag überhaupt keine if's ohne geschweifte Klammern, weder optisch noch auf die Übersicht bezogen. Aber wenn's alleine da steht, dann ist das schon legitim (nur eben nicht meinem Geschmack entsprechend). Ganz schlimm sind aber die ein-Zeilen-if's der Marke &quot;if(!bTrue) return;&quot;. Das geht nun wirklich nicht (und unser Code ist voll davon... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604157</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 24 Oct 2008 12:24:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Stil on Sat, 25 Oct 2008 14:11:44 GMT]]></title><description><![CDATA[<p>Danke erstmal für Eure Antworten. (Das mit den Klammern diskutiere ich jetzt mal nicht aus, denn darum ging's mir nicht.)<br />
Ich hätte aber noch eine Frage: Wenn ich Stil 3 benutze und dort lokale Variablen habe, legt er die dann nicht an, obwohl er sie unter Umständen gar nicht braucht?</p>
<pre><code class="language-cpp">bool Funktion()
{
	if (!Bedingung)
		return false;

	int zahl;
	string text;

	TuWas;
	TuMehr;

	return true;
}
</code></pre>
<p>Mir ist nämlich aufgefallen: Auch wenn ich die Variablen mitten in der Funktion deklariere, kennt sie der Debugger bereits am Anfang. Variablen dagegen, die sich innerhalb einer if-Anweisung befinden, kennt er erst, sobald er dort hineingeht. Kann es also sein, daß das Programm sämtliche Variablen, die im aktuellen Gültigkeitsbereich liegen, schonmal anlegt, auch wenn sie im Quelltext erst weiter unten deklariert werden? In dem Fall wäre ja einer der beiden ersten Stile wohl doch besser, da die Variablen da ja erst angelegt werden, wenn er in den if bzw. else-Zweig geht und somit keine überflüssigen Schritte ausführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604651</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Sat, 25 Oct 2008 14:11:44 GMT</pubDate></item></channel></rss>