<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mumpitz! &#187; stil</title>
	<atom:link href="http://www.p-shuttle.de/joh/tag/stil/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.p-shuttle.de/joh</link>
	<description>rief die Katze und sprang aus dem Sack.</description>
	<lastBuildDate>Wed, 25 Feb 2009 01:36:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>STYLE!</title>
		<link>http://www.p-shuttle.de/joh/2009/01/11/style/</link>
		<comments>http://www.p-shuttle.de/joh/2009/01/11/style/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 17:03:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Coding style]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[stil]]></category>
		<category><![CDATA[ungarische notation]]></category>

		<guid isPermaLink="false">http://www.p-shuttle.de/joh/?p=171</guid>
		<description><![CDATA[Ich muss ja sagen dass ich codetechnisch ein sehr aufgeräumter Mensch bin.
Was wahrscheinlich daran liegt dass ich hauptsächlich in C++ programmiere und unsauberer oder undurchgängiger Stil dort unglaublich schnell die Lesbarkeit beeinträchtigt.
Aus gegebenem Anlass (mein Projekt wird immer größer) möchte ich nochmal betonen wie wichtig es für jeden Programmierer es ist sich eine praktikable Variante [...]]]></description>
			<content:encoded><![CDATA[<p>Ich muss ja sagen dass ich codetechnisch ein sehr aufgeräumter Mensch bin.<br />
Was wahrscheinlich daran liegt dass ich hauptsächlich in C++ programmiere und unsauberer oder undurchgängiger Stil dort unglaublich schnell die Lesbarkeit beeinträchtigt.</p>
<p>Aus gegebenem Anlass (mein Projekt wird immer größer) möchte ich nochmal betonen wie wichtig es für jeden Programmierer es ist sich eine praktikable Variante der <a class="previewlink" href="http://de.wikipedia.org/wiki/Ungarische_Notation">ungarischen Notation </a>anzugewöhnen.</p>
<p>Natürlich gibt es noch einiges mehr Optimierungsraum:</p>
<ul>
<li><strong>Achtet darauf eure </strong><strong>Deklarationsdateien </strong>(Sprich headerfiles) nicht für Definitionen zu missbrauchen (mit der Ausnahme von Template-Definitionen), dazu gehören Macros: Wenn ihr solche verwenden müsst, achtet darauf dass der Code kurz bleibt, wie gesagt, Deklarationsdatei und so.</li>
<li><strong>Globale Variablen </strong>sind zuallererst einmal als Designfehler zu sehen. Berechtigung haben sie nur sehr selten, und mit OOP hat das Ganze nichts mehr am Hut.<br />
Falls man doch meinen sollte sie zu brauchen: Zugriff sollte in C++ durch <span style="color: #808080;"><em>::name</em></span> umgesetzt werden.</li>
<li><strong>Lasst die </strong><strong>Unterstriche </strong>aus Variablenbezeichnungen raus! Klar, ungarisch für Präfixe und so, aber: Innerhalb der Bezeichnung haben die Dinger nichts verloren. <span style="color: #808080;"><em><br />
my_map_start_iterator = m_mp_my_map.begin()</em> </span> kann keiner lesen,<span style="color: #808080;"> <em>itStart = m_mp.begin(); </em><span style="color: #000000;">genügt völlig.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Intelligente Namen geben. </strong>Zum Beispiel ist die Bezeichnung <span style="color: #808080;"><em>strText </em></span>ziemlich sinnfrei.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Stress sparen kann man </strong>sich auch in Funktionsaufrufen. Wird ein benutzerdefinierter Typ übergeben ist es am klarsten den Parameternamen gleich dem Typ zu setzen:<br />
<span style="color: #808080;"><em>LoadModel(Model* toLoad) </em></span>ist pfui, </span></span><span style="color: #808080;"><span style="color: #000000;">ebenso <em><span style="color: #808080;">LoadModel(Model* model3ds) </span></em>und </span></span><em><span style="color: #808080;"><span style="color: #000000;"><span style="color: #808080;">LoadModel(Model* reference) </span> </span></span></em><span style="color: #808080;"><span style="color: #000000;">auch, </span></span><em><span style="color: #808080;"><span style="color: #000000;"><span style="color: #808080;">LoadModel(Model* model) </span></span></span></em><span style="color: #808080;"><span style="color: #000000;">dagegen hui.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Abkürzungen </strong>bitte nicht konsequent großschreiben: <em><span style="color: #808080;">getHTMLPage() </span></em>wird zu <span style="color: #808080;"><em>getHtmlPage()</em></span>. </span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Redundanzen vermeiden </strong>was Namen angeht. Eine Matrix-Klasse  benötigt keine Funktion <span style="color: #808080;"><em>InvertMatrix()</em></span> und eine Klasse <span style="color: #808080;"><em>Gui </em></span>(man bemerke: G groß, Rest klein) benötigt keine Methode <span style="color: #808080;"><em>ShowGui()</em></span>. Der Aufruf <span style="color: #808080;"><em>gui.show(); </em></span>ist schneller und angenehmer zu lesen.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Private Variablen </strong>sollten mit einem Unterstrich gekennzeichnet werden.<span style="color: #808080;"><em> _transformationMatrix</em></span> oder <span style="color: #808080;"><em>transformationMatrix_ </em></span>geht gleichermaßen &#8211; Beides lässt keinen Zweifel darüber aufkommen dass die Variable extern niemanden zu interessieren hat.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Meine Klassen erweitere ich mit einem Präfix </strong>als Indikator um welches Design Pattern es sich handelt:<br />
<span style="color: #808080;"><em>C</em></span> &#8211; Normale Implementierung<br />
<span style="color: #808080;">I</span> &#8211; Interface<br />
<em><span style="color: #808080;">S</span></em> &#8211; Singleton<br />
<em><span style="color: #808080;">T </span></em>- Template<br />
Dass dies Standard ist glaube ich nicht, aber mir hiflt es wirklich sehr.<br />
</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Nutzt kluge Umbrüche </strong>wenn die Zeile nicht reicht! Rechnungen nach dem nächsten Operator umbrechen, <span style="color: #808080;"><em>couts</em></span> nach dem nächsten <span style="color: #808080;"><em>&lt;&lt; </em></span>und so weiter. Horizontale Scrollbalken haben im Editor nichts zu suchen. Achtet dabei auch darauf dass nicht jeder einen 24&#8243; </span></span><span style="color: #808080;"><span style="color: #000000;">Bildschirm mit </span></span><span style="color: #808080;"><span style="color: #000000;">16:10 Verhältnis besitzt und brecht dementsprechend früh um.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Nutzt Boolean-Variablen </strong>um bedingte Ausdrücke zu vereinfachen:</span><span style="color: #000000;"><br />
<span style="color: #808080;"><em>if ( (lstToDo.size() = 0 &amp;&amp; !IsCalculation) || lstErrorCodes.size() !=0){</em></span> ist sehr, sehr schlecht.<br />
Besser ist:<br />
<span style="color: #808080;"><em>bool isDone = lstToDo.size() == 0 &amp;&amp; !isCalculating;<br />
bool isError = lstErrorCodes.size() = 0;<br />
if (isDone || isError){</em></span></span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Benutzt die Leertaste!</strong><br />
</span><span style="color: #000000;"><span style="color: #808080;"><em>for(int i=0;i&lt;arr.length();i++)<br />
arr[i]+=(newPos+thisPos)*1/2;</em></span><br />
Grauenhaft.<br />
<span style="color: #808080;"><em>for  (int i = 0;  i &lt; arr.length();  i++)<br />
arr[i]  +=  (newPos + thisPos)  /  2;</em></span><br />
Besser.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Der Raum Zwischen Methoden und Klassen </strong>kann nicht unterschätzt werden. Ich persönlich lasse zwischen Methoden 2 Leerzeilen, zur nächsten Klasse 4.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Kommentare sollte es viele geben</strong>, allerdings sollten sie auch eine Aussage haben.<br />
<span style="color: #808080;"><em>coords.x++;                            //  increment x by 1</em></span><br />
ist dumm.<br />
<span style="color: #808080;"><em>coords.x++;                           // move player to the right</em></span><br />
ist besser.</span></span></li>
<li><span style="color: #808080;"><strong><span style="color: #000000;">Kommentare sind englisch.</span></strong><span style="color: #000000;"><br />
Immer.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Rückt Kommentare bündig ein. </strong>Selbsterklärend. Kommentare sollten nicht die Sicht nehmen weil sie kreuz und quer im Code liegen. Dazu gehört auch, ganz wichtig:</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Soweit möglich, Kommentare hinter den Zeilen postieren</strong>, nicht über dem zu kommentierenden </span></span><span style="color: #808080;"><span style="color: #000000;">Code</span></span><span style="color: #808080;"><span style="color: #000000;">. Letzteres ist vor Methoden und Klassen schön übersichtlich, nicht jedoch im fließenden Code.<br />
Außnahme: Man erläutert die Aufgabe eines kompletten Codeblock. </span><span style="color: #000000;">Das macht man dann natürlich vor dem Block.<br />
</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Achtet als generelle Regel darauf </strong>dass die Kommentare den Codefluss nicht stören oder unterbrechen, jedoch schnell zu sehen sind wenn man etwas vom Code nicht versteht.<br />
</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Über Klassen kommt bei mir zusätzlich </strong>eine Kommentarlinie die den Namen enthält, darunter eine kleine Definition:<br />
<span style="color: #808080;"><em>//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;CVec3f&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
// Data structure holding three floating point coordinates and allowing all necessary vector operations<br />
// through its&#8217; overloaded operators.</em></span><br />
Darunter (zu den 4 Leeren Zeilen darüber!) nochmals eine Leerzeile und dann der Klassenrumpf.</span></span></li>
</ul>
<p>Es gibt der Regeln sicherlich noch hunderte mehr, aber soviel sprang mir gerade in den Kopf. Wer noch was wichtiges auf dem Herzen hat der sei Willkommen in den Kommentaren noch was zu schreiben <img src='http://www.p-shuttle.de/joh/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2009/01/11/style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

