<?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[Lesbarer Quellcode ?]]></title><description><![CDATA[<p>Moin,</p>
<p>man hört ja immer wieder, dass man den Quellcode lesen können sollte wie ein Buch. Wenn sich andere zurechtfinden, dann hat man gute Arbeit geleistet. Mich würde mal Interessieren, ob man den folgenden Quellext nachvollziehen kann. Es geht dabei um eine Funktion, einen Lieferanten zu kopieren. Wahlweise mit Artikeln und Artikelgruppen.</p>
<p>Ich weiss, dass hier einige Unarten drin sind (const bool ...), aber dieses zieht sich jetzt schon durch das ganze Projekt <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>
<pre><code class="language-cpp">const bool CSupplierCopyGUI::CopySupplier(void)
{
	//Wurde eine Zielbeschreibung eingetragen ?
	if (m_wxTextDestination-&gt;GetValue() == &quot;&quot;)
	{
		wxMessageBox(&quot;Bitte tragen Sie noch eine Beschreibung für den neuen Lieferanten ein.&quot;, &quot;Fehlende Angabe&quot;);
		m_wxTextDestination-&gt;SetFocus();
		return false;
	}

	//Existiert der Lieferant schon ?
	if (SupplierExists())
	{
		wxMessageBox(&quot;Die von Ihnen eingegebene Beschreibung für den neuen Lieferanten existiert schon. &quot; \
					 &quot;Bitte wählen Sie eine andere.&quot;, &quot;Doppelter Eintrag&quot;, wxICON_ERROR);

		m_wxTextDestination-&gt;SetFocus();
		return false;
	}

	//Den Lieferant kopieren
	CSupplier Supplier(m_lpCore, m_sSource.c_str(), true);

	wxString sOldNumber = Supplier.GetNumber();

	Supplier.Reset();

	Supplier.SetDisplayText(m_wxTextDestination-&gt;GetValue().c_str());
	Supplier.Save();

	//Wenn der Button &quot;Nur Lieferant&quot; angewaehlt wurde, dann ist hier Schluss
	if (m_wxRadioNone-&gt;GetValue())
		return true;

	//Es werden nach Artikelgruppen des alten Lieferanten gesucht
	CMySQLQuery *lpGroupQuery = new CMySQLQuery(m_lpCore-&gt;GetCMySQL());
	lpGroupQuery-&gt;Query(&quot;SELECT nIndex FROM %s WHERE sSupplierNumber = '%s' ORDER BY sGroupName&quot;, TABLE_NAME_ITEMGROUP, sOldNumber.c_str());

	if (lpGroupQuery-&gt;GetResultCount() == 0)
	{
		SAFE_DELETE(lpGroupQuery);
		return true;
	}

	//Gruppen durchlaufen und aendern
	for (int nGroupIndex = 0; nGroupIndex != lpGroupQuery-&gt;GetResultCount(); nGroupIndex++)
	{
		CItemGroup Group(m_lpCore-&gt;GetCMySQL(), lpGroupQuery-&gt;GetIntValue(nGroupIndex, &quot;nIndex&quot;));

		int nOldGroupIndex = Group.GetIndex();

		Group.Reset();
		Group.SetSupplierNumber(Supplier.GetNumber());
		Group.Save();

		//Sollen die Artikel kopiert werden ?
		if (m_wxRadioAll-&gt;GetValue())
		{
			CMySQLQuery *lpItemQuery = new CMySQLQuery(m_lpCore-&gt;GetCMySQL());
			lpItemQuery-&gt;Query(&quot;SELECT nIndex FROM %s WHERE nGroupIndex = '%d' ORDER BY sNumber&quot;, TABLE_NAME_ITEM, nOldGroupIndex);

			//Artikel durchlaufen und aendern
			for (int nItemIndex = 0; nItemIndex != lpItemQuery-&gt;GetResultCount(); nItemIndex++)
			{
				CItem Item(m_lpCore-&gt;GetCMySQL(), lpItemQuery-&gt;GetIntValue(nItemIndex, &quot;nIndex&quot;));

				Item.Reset();
				Item.SetGroupIndex(Group.GetIndex());
				Item.Save();
			}

			SAFE_DELETE(lpItemQuery);
		}		
	}

	SAFE_DELETE(lpGroupQuery);

	return true;
}
</code></pre>
<p>Ich bin mal gespannt.</p>
<p>Gruß SciFi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179189/lesbarer-quellcode</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Jul 2026 10:23:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179189.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Apr 2007 09:54:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 09:54:03 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>man hört ja immer wieder, dass man den Quellcode lesen können sollte wie ein Buch. Wenn sich andere zurechtfinden, dann hat man gute Arbeit geleistet. Mich würde mal Interessieren, ob man den folgenden Quellext nachvollziehen kann. Es geht dabei um eine Funktion, einen Lieferanten zu kopieren. Wahlweise mit Artikeln und Artikelgruppen.</p>
<p>Ich weiss, dass hier einige Unarten drin sind (const bool ...), aber dieses zieht sich jetzt schon durch das ganze Projekt <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>
<pre><code class="language-cpp">const bool CSupplierCopyGUI::CopySupplier(void)
{
	//Wurde eine Zielbeschreibung eingetragen ?
	if (m_wxTextDestination-&gt;GetValue() == &quot;&quot;)
	{
		wxMessageBox(&quot;Bitte tragen Sie noch eine Beschreibung für den neuen Lieferanten ein.&quot;, &quot;Fehlende Angabe&quot;);
		m_wxTextDestination-&gt;SetFocus();
		return false;
	}

	//Existiert der Lieferant schon ?
	if (SupplierExists())
	{
		wxMessageBox(&quot;Die von Ihnen eingegebene Beschreibung für den neuen Lieferanten existiert schon. &quot; \
					 &quot;Bitte wählen Sie eine andere.&quot;, &quot;Doppelter Eintrag&quot;, wxICON_ERROR);

		m_wxTextDestination-&gt;SetFocus();
		return false;
	}

	//Den Lieferant kopieren
	CSupplier Supplier(m_lpCore, m_sSource.c_str(), true);

	wxString sOldNumber = Supplier.GetNumber();

	Supplier.Reset();

	Supplier.SetDisplayText(m_wxTextDestination-&gt;GetValue().c_str());
	Supplier.Save();

	//Wenn der Button &quot;Nur Lieferant&quot; angewaehlt wurde, dann ist hier Schluss
	if (m_wxRadioNone-&gt;GetValue())
		return true;

	//Es werden nach Artikelgruppen des alten Lieferanten gesucht
	CMySQLQuery *lpGroupQuery = new CMySQLQuery(m_lpCore-&gt;GetCMySQL());
	lpGroupQuery-&gt;Query(&quot;SELECT nIndex FROM %s WHERE sSupplierNumber = '%s' ORDER BY sGroupName&quot;, TABLE_NAME_ITEMGROUP, sOldNumber.c_str());

	if (lpGroupQuery-&gt;GetResultCount() == 0)
	{
		SAFE_DELETE(lpGroupQuery);
		return true;
	}

	//Gruppen durchlaufen und aendern
	for (int nGroupIndex = 0; nGroupIndex != lpGroupQuery-&gt;GetResultCount(); nGroupIndex++)
	{
		CItemGroup Group(m_lpCore-&gt;GetCMySQL(), lpGroupQuery-&gt;GetIntValue(nGroupIndex, &quot;nIndex&quot;));

		int nOldGroupIndex = Group.GetIndex();

		Group.Reset();
		Group.SetSupplierNumber(Supplier.GetNumber());
		Group.Save();

		//Sollen die Artikel kopiert werden ?
		if (m_wxRadioAll-&gt;GetValue())
		{
			CMySQLQuery *lpItemQuery = new CMySQLQuery(m_lpCore-&gt;GetCMySQL());
			lpItemQuery-&gt;Query(&quot;SELECT nIndex FROM %s WHERE nGroupIndex = '%d' ORDER BY sNumber&quot;, TABLE_NAME_ITEM, nOldGroupIndex);

			//Artikel durchlaufen und aendern
			for (int nItemIndex = 0; nItemIndex != lpItemQuery-&gt;GetResultCount(); nItemIndex++)
			{
				CItem Item(m_lpCore-&gt;GetCMySQL(), lpItemQuery-&gt;GetIntValue(nItemIndex, &quot;nIndex&quot;));

				Item.Reset();
				Item.SetGroupIndex(Group.GetIndex());
				Item.Save();
			}

			SAFE_DELETE(lpItemQuery);
		}		
	}

	SAFE_DELETE(lpGroupQuery);

	return true;
}
</code></pre>
<p>Ich bin mal gespannt.</p>
<p>Gruß SciFi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269100</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 09:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:04:45 GMT]]></title><description><![CDATA[<p>Dank der Kommentare kann man den Sinn verstehen. Und durch die Fehlermeldungen ebenfalls.</p>
<p>Aber die Namen der Variablen haben teilweise mit der Aktion in den Kommentaren gar nichts gemeinsam.</p>
<pre><code class="language-cpp">if (m_wxRadioNone-&gt;GetValue())
        return true;
</code></pre>
<p>Ohne den Kommentar kann man das nicht verstehen.</p>
<p>Beim Lieferant kopieren sind die Zeilen darunter auch unklar:</p>
<pre><code class="language-cpp">wxString sOldNumber = Supplier.GetNumber();

    Supplier.Reset();

    Supplier.SetDisplayText(m_wxTextDestination-&gt;GetValue().c_str());
    Supplier.Save();
</code></pre>
<p>Was passiert hier? Das Save synchronisiert wahrscheinlich mit der Datenbank.<br />
Aber was hat das Supplier-Objekt mit der Oberfläche zu tun? Wenn die Funktion tatsächlich auf die Oberfläche zugreift, warum übergibst du ihr einen String?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269111</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:07:15 GMT]]></title><description><![CDATA[<p>Nur ganz kurz, zwei Dinge (hätte noch deutlich mehr):</p>
<p>//Wurde eine Zielbeschreibung eingetragen ?<br />
if (m_wxTextDestination-&gt;GetValue() == &quot;&quot;)</p>
<p>IST REDUNDANT. TextDestination heißt Zielbeschreibung, GetValue()==&quot;&quot; heißt &quot;eingetragen?&quot;. Wiederholst Du Dich gerne?</p>
<p>Weiterhin, Du hast Deinen SQL-Kram nicht in einem DatabaseAccessLayer gekapselt, schlecht. Zum einen mußt Du vielleicht mal einen anderen SQL-Server nehmen, der leichte Abweichungen im Syntax hast, zum anderen kann es Dir passieren, daß Du irgendeinen SQL-Exploit eingebaut hast, den Du nun munter 1000mal im Code wiederholst, der Fehler ist dann nie mehr zu fixen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269113</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:07:15 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:19:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13970">@lolz</a></p>
<p>Diese Funktion ist in der GUI. Der Supplier (CSupplier) ist eine Klasse aus dem Kern. Das Reset bedeutet, dass die Zuordnung in der Datenbank aufgehoben wird und mit dem Save wird dieser Datensatz neu geschrieben. Der Displaytext ist der Anzeigename des Lieferanten in der Übersicht. Diese wird in eine Treeview geladen.</p>
<p>&amp; marc++us</p>
<p>Der m_wxTextDestination ist ein wxTextCtrl Object. Dieses Textfeld beinhaltet die Beschreibung (Displaytext) des neuen Lieferanten. Dieses Feld muss ich mit GetValue() auslesen.</p>
<p>Danke für eure Kritik <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/1269122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269122</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:19:44 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:25:29 GMT]]></title><description><![CDATA[<p>SciFi schrieb:</p>
<blockquote>
<p>Der m_wxTextDestination ist ein wxTextCtrl Object. Dieses Textfeld beinhaltet die Beschreibung (Displaytext) des neuen Lieferanten. Dieses Feld muss ich mit GetValue() auslesen.</p>
</blockquote>
<p>Das ist mir klar. Aber wozu hast Du den Kommentar geschrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269123</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:25:29 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:27:47 GMT]]></title><description><![CDATA[<p>Marcus meinte auch nicht der Code wäre falsch sondern dass der Kommentar genau null Mehrwert hat. Wäre genau so was wie hier</p>
<pre><code class="language-cpp">// Jetzt lassen wir den Zähler i laufen
for (int i = ...) ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1269126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269126</guid><dc:creator><![CDATA[CengizS]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:27:47 GMT]]></title><description><![CDATA[<p>Du hast Recht. &quot;Zielbeschreibung&quot; ist etwas unglücklich. Ich meinte die Beschreibung für den Ziellieferanten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269125</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:34:04 GMT]]></title><description><![CDATA[<p>CengizS schrieb:</p>
<blockquote>
<p>Marcus meinte auch nicht der Code wäre falsch sondern dass der Kommentar genau null Mehrwert hat. Wäre genau so was wie hier</p>
<pre><code class="language-cpp">// Jetzt lassen wir den Zähler i laufen
for (int i = ...) ...
</code></pre>
</blockquote>
<p>Sowas habe ich hier schon mal gesehen. Im ernst. Man, ich lag unterm Tisch vor Lachen. Ging garnicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269129</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:38:52 GMT]]></title><description><![CDATA[<p>Die Funktion CopySupplier ist viel zu lang. Außerdem würde ich sowas auf 100 Zeichen formatieren. Ma muß den Kopf beim Lesen von gaaanz links nach gaaanz rechts bewegen, um eine Zeile zu lesen. Wäre das in der Tageszeitung auch so, würde man bekloppt werden. <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>
<p>Die letzte for-Schleife könnte man idealerweise in eine eigene private Methode extrahieren. Haste kein Refactoringtool? Zwei Mouseklicks und fertig. Ich schreibe meistens auch so lange Funktionen, aber sobald ich die fertig habe, ist erstmal Refactoring angesagt, damit ich vernünftig weiter arbeiten kann.</p>
<p>Den Abschnitt &quot;Lieferanten kopieren&quot; kann man auch in eine eigene Methode extrahieren. Überall wo solche Blockkomentare sind, kann man potenziell extrahieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269135</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 10:44:14 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Die letzte for-Schleife könnte man idealerweise in eine eigene private Methode extrahieren. Haste kein Refactoringtool? Zwei Mouseklicks und fertig. Ich schreibe meistens auch so lange Funktionen, aber sobald ich die fertig habe, ist erstmal Refactoring angesagt, damit ich vernünftig weiter arbeiten kann.</p>
</blockquote>
<p>Daran habe ich auch schon gedacht, aber diese Funktion ist eine Memberfunktion des Lieferantenstammes und ich brauche diese nie wieder. Ich könnte das ganze jetzt in 2 bis 3 private Methoden aufteilen, aber eine Copy Methode schien mir sinnvoller. Ein Refactoring Tool besitze ich leider nicht. Werde ich mal nach googlen.</p>
<p>Es ist ist aber nicht so, dass der Code unter aller Sau ist oder ? Es steckt immer viel Arbeit drin, gerade in der GUI, welche ich eh nicht gerne mache.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269140</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:44:14 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 11:17:47 GMT]]></title><description><![CDATA[<p>Doch.</p>
<p>Du machst den beliebten Fehler, wie man ihn bei GUIlastigen Programmen immer wieder sieht, Du mischst GUI-Logik, Applikationslogik und Treiberebene in einem einzigen Funktionsaufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269159</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Thu, 19 Apr 2007 11:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 11:40:17 GMT]]></title><description><![CDATA[<p>SciFi schrieb:</p>
<blockquote>
<p>Daran habe ich auch schon gedacht, aber diese Funktion ist eine Memberfunktion des Lieferantenstammes und <strong>ich brauche diese nie wieder</strong>.</p>
</blockquote>
<p>Das ist überhaupt kein Argument, sorry. Alles was private ist, wird potenziell nirgends woanders gebraucht. Vielleicht innerhalt einer Klasse, klar. Aber darum geht es ja nicht. Wenn die for-Schleife ausgelagert wird, liest sich der Code besser. Und der Fehler lässt sich einfacher lokalisieren, wenn ein Fehler auftreten sollte. Du hast da einen Kommentar hingeschrieben:<br />
//Gruppen durchlaufen und aendern</p>
<p>Warum machst du daraus nicht eine private Funktion manipulateGroups() oder sowas? 1. könnteste dir den Kommentar sparen, und 2. wäre die Schleife eine eigene Einheit. Durch letzteren Punkt kann man schon mehr Fehler vermeiden, auch in Zukunft.</p>
<p>SciFi schrieb:</p>
<blockquote>
<p>Es ist ist aber nicht so, dass der Code unter aller Sau ist oder ? Es steckt immer viel Arbeit drin, gerade in der GUI, welche ich eh nicht gerne mache.</p>
</blockquote>
<p>Yo, überhaupt ganz schlecht, das du fachliche Logic in der GUI stehen hast. Sowas gehört ausgelagert, in eine eigene Schicht. Wenn nicht sogar in eine eigene Library (ist dann aber der extremste, aber auch beste, Fall).</p>
<p>Kommt auch darauf an, ob wxWidgets überhaupt sogute Konzepte anbietet? Wenn nicht, muß man sich sowas suchen oder selber designen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269174</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 19 Apr 2007 11:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 11:47:52 GMT]]></title><description><![CDATA[<p>Eigentlich sind die Sachen getrennt. Die Lieferanten, Gruppen, Artikel, Belege, Position etc sind alle in einer einen Library (Core). Normalerweise wird hier alles erledigt. Die GUI greift nur noch auf die fertigen Klassen zu.</p>
<p>In diesem Fall war es aber anders. Die Kopierfunktion habe ich eigentlich ganz bewusst mit in die GUI aufgenommen. Hier werden auch nur die Klassen geladen, resettet und neu gespeichert.</p>
<p>Das mein Code nun unter aller Sau ist schockt mich schon, aber das Leben geht weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269185</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 11:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 12:22:29 GMT]]></title><description><![CDATA[<p>Hihi, aber du wolltest es ja wissen. :p</p>
<p>Aber du wirst dich die nächsten Jahre verbessern. Ist bei jedem so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269220</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 19 Apr 2007 12:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 14:20:05 GMT]]></title><description><![CDATA[<p>Unter aller Sau würde ich das nicht bezeichnen. Es gibt deutlich schlimmeres, glaub mir <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/1269311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269311</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 19 Apr 2007 14:20:05 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 14:29:29 GMT]]></title><description><![CDATA[<p>[quote=&quot;SciFi&quot;]</p>
<pre><code class="language-cpp">const bool CSupplierCopyGUI::CopySupplier(void)
</code></pre>
<p>ok, das const bool als Rückgabetyp sinnlos ist hast du ja selbst erkannt</p>
<p>Allgemein ist die Funktion viel zu lang. Teile Aufgaben lieber in kleine und wohl definierte (== verständlicher Name) Unterfunktionen auf.</p>
<pre><code class="language-cpp">CSupplier Supplier(m_lpCore, m_sSource.c_str(), true);
</code></pre>
<p>C als Klassen-Prefix ist Oberpfui. (Ok, hört sich so an, als könntest du nicht viel dafür). Auch die API des Konstruktors scheint nicht ideal zu sein, wenn du auf einmal mit c-Strings rumhantieren musst.</p>
<pre><code class="language-cpp">CMySQLQuery *lpGroupQuery = new CMySQLQuery(m_lpCore-&gt;GetCMySQL());
</code></pre>
<p>Nimm für so etwas lieber einen Smart-Pointer, da du sonst Exception-Sicherheit kaum gewährleisten kannst (ich empfehle dir mal ein bisschen in <a href="http://www.gotw.ca/gotw/" rel="nofollow">GotW</a> zu lesen.</p>
<p>Ansonsten finde ich dein Namensschema uneindeutig. Mal fangen Variablen mit großen Buchstaben an, manchmal mit kleinen, wobei du dann noch unverstänliche Buchstabenfolgen an den Anfang hängst (gut, ich weiß das soll diese sinnlose UN sein. Aber mal ehrlich. GroupQuery kannst du dir merken und wenn du dir merken kannst, das es lpGroupQuery heißt, dann kannst du dir auch merken das es ein Pointer ist...)</p>
<pre><code class="language-cpp">//Gruppen durchlaufen und aendern
	for (int nGroupIndex = 0; nGroupIndex != lpGroupQuery-&gt;GetResultCount(); nGroupIndex++)
</code></pre>
<p>das sollte vermutlich kein int sein, sondern eher was in Richtung unsigned ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269314</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 19 Apr 2007 14:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 15:54:26 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>C als Klassen-Prefix ist Oberpfui.</p>
</blockquote>
<p>Ehrlich ? Ich hatte das mal am Anfang so gelernt und seitdem nicht mehr abgelegt.</p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>(Ok, hört sich so an, als könntest du nicht viel dafür). Auch die API des Konstruktors scheint nicht ideal zu sein, wenn du auf einmal mit c-Strings rumhantieren musst.</p>
</blockquote>
<p>Das ist auf meinen Mist gewachsen. Als ich den Kern geplant habe, wusste ich noch nicht, welche GUI ich nehmen soll. Da jetzt jede Lib Ihre eigenen String hat (QString, wxString) etc und ich den Kern unabhängig haben wollte (reines C++ mit MySQL) habe ich mich für die const char * Variante entschieden. Intern arbeitet die Klasse mit strings.</p>
<p>rüdiger schrieb:</p>
<blockquote>
<pre><code class="language-cpp">CMySQLQuery *lpGroupQuery = new CMySQLQuery(m_lpCore-&gt;GetCMySQL());
</code></pre>
<p>Nimm für so etwas lieber einen Smart-Pointer, da du sonst Exception-Sicherheit kaum gewährleisten kannst (ich empfehle dir mal ein bisschen in <a href="http://www.gotw.ca/gotw/" rel="nofollow">GotW</a> zu lesen.</p>
</blockquote>
<p>Das weiss ich genau was ich mache. Der Zeiger ist gültig, bis sich das Programm beendet. Der Kern (Core) hat die MySQL Klasse als Member.</p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Ansonsten finde ich dein Namensschema uneindeutig. Mal fangen Variablen mit großen Buchstaben an, manchmal mit kleinen, wobei du dann noch unverstänliche Buchstabenfolgen an den Anfang hängst (gut, ich weiß das soll diese sinnlose UN sein. Aber mal ehrlich. GroupQuery kannst du dir merken und wenn du dir merken kannst, das es lpGroupQuery heißt, dann kannst du dir auch merken das es ein Pointer ist...)</p>
</blockquote>
<p>Normalerweise fangen bei mir Variablen immer klein an. Und zwar mit der UN Bezeichnung : nIndex etc. Die einzige Ausnahme bilden Klassen. Die fangen immer groß und ohne präfix an.</p>
<p>Das mache ich auch schon seitdem ich C++ programmiere. Früher habe ich mit VB geabeitet und kreuz und quer gearbeitet. Als ich auf C++ umgestiegen bin, wollte ich alles richtig machen UN etc. Nun ist alles Humbug <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>
<p>rüdiger schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//Gruppen durchlaufen und aendern
	for (int nGroupIndex = 0; nGroupIndex != lpGroupQuery-&gt;GetResultCount(); nGroupIndex++)
</code></pre>
<p>das sollte vermutlich kein int sein, sondern eher was in Richtung unsigned ...</p>
</blockquote>
<p>Da gebe ich Dir recht.</p>
<p>So, nun bin ich genug geprügelt worden <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/1269380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269380</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 15:54:26 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 16:45:18 GMT]]></title><description><![CDATA[<p>SciFi schrieb:</p>
<blockquote>
<p>Das weiss ich genau was ich mache. Der Zeiger ist gültig, bis sich das Programm beendet. Der Kern (Core) hat die MySQL Klasse als Member.</p>
</blockquote>
<p>Das meint er doch gar nicht. <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>
<p>Die Frage ist, wer lpGroupQuery freigibt, falls die SQL-Abfrage eine Exception wirft, was ja immer mal vorkommen kann.</p>
<p>Btw, ich finde viel schlimmer als die Namenskonvention weiterhin, daß Applikationslogik und Treiberlogik in die GUI gemischt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269428</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Thu, 19 Apr 2007 16:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 16:47:25 GMT]]></title><description><![CDATA[<p>Marc++us schrieb:</p>
<blockquote>
<p>SciFi schrieb:</p>
<blockquote>
<p>Das weiss ich genau was ich mache. Der Zeiger ist gültig, bis sich das Programm beendet. Der Kern (Core) hat die MySQL Klasse als Member.</p>
</blockquote>
<p>Das meint er doch gar nicht. <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>
<p>Die Frage ist, wer lpGroupQuery freigibt, falls die SQL-Abfrage eine Exception wirft, was ja immer mal vorkommen kann.</p>
<p>Btw, ich finde viel schlimmer als die Namenskonvention weiterhin, daß Applikationslogik und Treiberlogik in die GUI gemischt wurde.</p>
</blockquote>
<p>Die Klasse wirft keine Execptions. Die ist auch von mir. Ich arbeite mit Rückgabecodes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269431</guid><dc:creator><![CDATA[SciFi]]></dc:creator><pubDate>Thu, 19 Apr 2007 16:47:25 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 17:05:05 GMT]]></title><description><![CDATA[<p>Das mit dem C am Anfang von Klassennamen hat Microsoft damals für die MFC eingeführt, weil es noch keine Namespaces gab. Damit sollten Namenskonflikte verhindert werden. Aber nun sind dummerweise einige Leute dazu übergegangen das C selbst zu verwenden (aus welchem Grund auch immer, der Lesbarkeit bringt es definitiv nichts oder ist es interessant ob es sich um eine Klasse, Struct, Typedef oder was auch immer handelt?). Das ist nicht sehr sinnvoll.</p>
<p>Ich finde es auch nicht unbedingt sinnvoll Objekte anders zu behandeln als PODs oder Variablen von Builtin-Typen (zB in der Namensgebung). Das zeugt imho eher von einer zumindest antiquierten Verwendung der Objektorientierung.</p>
<p>UN ist wirklich humbug. Das führt zu folgenden Problemen: Du denkst zu viel über den Typ nach, dabei ist eine Variable ja eher ein abstraktes Konzept von etwas. Welcher Typ sich genau dahinter verbirgt ist egal, solange er dem Konzept entspricht (also eine Variable index kann zB vom Typ unsigned, std::size_t, std::vector&lt;T&gt;::size_type, Index etc sein. Das ist im Grunde eher uninteressant).</p>
<p>Außerdem verkompliziert es das programmieren. Du musst wahrscheinlich regelmäßig nachschauen wie die Variable genau heißt (fängt er nun mit einem l oder i oder n etc an?). Solchen Namen kann man sich schlecht merken. Da schaut man lieber mal in dem Fall genau nach, in dem man den Typ genau wissen muss.</p>
<p>SciFi schrieb:</p>
<blockquote>
<p>Marc++us schrieb:</p>
<blockquote>
<p>SciFi schrieb:</p>
<blockquote>
<p>Das weiss ich genau was ich mache. Der Zeiger ist gültig, bis sich das Programm beendet. Der Kern (Core) hat die MySQL Klasse als Member.</p>
</blockquote>
<p>Das meint er doch gar nicht. <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>
<p>Die Frage ist, wer lpGroupQuery freigibt, falls die SQL-Abfrage eine Exception wirft, was ja immer mal vorkommen kann.</p>
<p>Btw, ich finde viel schlimmer als die Namenskonvention weiterhin, daß Applikationslogik und Treiberlogik in die GUI gemischt wurde.</p>
</blockquote>
<p>Die Klasse wirft keine Execptions. Die ist auch von mir. Ich arbeite mit Rückgabecodes.</p>
</blockquote>
<p>Selbst wenn alle Methoden/Funktionen die du aufrufst nie nie nie im Leben eine Exception werfen würden (was ich nicht glaube), enthält dein Code sogar eine Stelle an der eine Exception fliegen kann.</p>
<p>Es ist nicht leicht Exception sicheren Code zu schreiben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269449</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 19 Apr 2007 17:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 17:48:41 GMT]]></title><description><![CDATA[<p>Rückgabecodes statt Exceptions sind böse.<br />
Rückgabecodes kann man ignorieren, tut man auch =&gt; unauffindbare Fehler entstehen.</p>
<p>Was diese ungarische notation angeht. Was haltet ihr davon diese nicht zu verwenden um den typen zu &quot;dokumentieren&quot;, sondern den Verwendungszweck der Variable. Z.b. int bIstAn ? bIstAn kann 0 oder 1 sein, bzw. true oder false?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269472</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Thu, 19 Apr 2007 17:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 18:22:56 GMT]]></title><description><![CDATA[<p>matimatiker schrieb:</p>
<blockquote>
<p>Was haltet ihr davon diese nicht zu verwenden um den typen zu &quot;dokumentieren&quot;, sondern den Verwendungszweck der Variable. Z.b. int bIstAn ? bIstAn kann 0 oder 1 sein, bzw. true oder false?</p>
</blockquote>
<p>Wo ist der Sinn davon? Wenn man eine Variable einschränken will, dann nimmt man eben einen entsprechenden Typ (in dem Fall zB bool) oder bastelt eine entsprechende Klasse. Dafür gibt es ja OOP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269496</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 19 Apr 2007 18:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 18:30:58 GMT]]></title><description><![CDATA[<p>matimatiker schrieb:</p>
<blockquote>
<p>Rückgabecodes statt Exceptions sind böse.<br />
Rückgabecodes kann man ignorieren, tut man auch =&gt; unauffindbare Fehler entstehen.</p>
</blockquote>
<p>Exceptions kann man in C++ aber auch ignorieren, was das ganze arbeiten damit komplizierter macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269502</guid><dc:creator><![CDATA[naja]]></dc:creator><pubDate>Thu, 19 Apr 2007 18:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 18:58:37 GMT]]></title><description><![CDATA[<p>naja ist vorschrift für mich auf der arbeit. habe anfangs auch nicht den sinn davon verstanden. Diese Beispiele sind halt sinnvoller:</p>
<pre><code class="language-cpp">int* pInt;
SmartPtr&lt;int&gt; pInt;
int* bufInt;
</code></pre>
<p>und kommt mir nicht damit für bufInt std::vector vorzuschlagen. Um z.b. binary-dateien einzulesen ist es nutzlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269504</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Thu, 19 Apr 2007 18:58:37 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 18:36:13 GMT]]></title><description><![CDATA[<p>naja schrieb:</p>
<blockquote>
<p>matimatiker schrieb:</p>
<blockquote>
<p>Rückgabecodes statt Exceptions sind böse.<br />
Rückgabecodes kann man ignorieren, tut man auch =&gt; unauffindbare Fehler entstehen.</p>
</blockquote>
<p>Exceptions kann man in C++ aber auch ignorieren, was das ganze arbeiten damit komplizierter macht.</p>
</blockquote>
<p>Ja, aber um die zu ignorieren musst du aufwand betreiben. um rückgabekodes zu ignorien muss du keinen. im gegenteil um auf rückgabecodes zu testen musst du aufwand betreiben.</p>
<p>worauf ich hinaus will?<br />
faulheit</p>
<p>Edit:<br />
Nagut manchmal überwieder der aufwand eine fehler zu beseitigen den aufwand die entsprechende exception zu ignorieren... <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/1269505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269505</guid><dc:creator><![CDATA[matimatiker]]></dc:creator><pubDate>Thu, 19 Apr 2007 18:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Lesbarer Quellcode ? on Thu, 19 Apr 2007 18:35:13 GMT]]></title><description><![CDATA[<p>matimatiker schrieb:</p>
<blockquote>
<p>Ja, aber um die zu ignorieren musst du aufwand betreiben. um rückgabekodes zu ignorien muss du keinen.</p>
</blockquote>
<p>gute compiler geben ein warning aus, wenn man return values ignoriert...<br />
<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/1269509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269509</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Thu, 19 Apr 2007 18:35:13 GMT</pubDate></item></channel></rss>