<?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[Unerlaubte Argumente anzeigen]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich würde gerne wissen, wie ich ein nicht erlaubtes Argument (z.B. negatives Monat) &quot;anzeigen&quot; sollte.<br />
In Java werfe ich einfach eine IllegalArgumentException.<br />
Sollte ich in C++ eine invalid_argument Exception werfen?<br />
Ich habe gelesen, dass man in Konstruktoren nicht unbedingt Exceptions werfen sollte, stimmt das?</p>
<p>LG!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331779/unerlaubte-argumente-anzeigen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 08:48:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331779.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Mar 2015 19:59:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 19:59:13 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich würde gerne wissen, wie ich ein nicht erlaubtes Argument (z.B. negatives Monat) &quot;anzeigen&quot; sollte.<br />
In Java werfe ich einfach eine IllegalArgumentException.<br />
Sollte ich in C++ eine invalid_argument Exception werfen?<br />
Ich habe gelesen, dass man in Konstruktoren nicht unbedingt Exceptions werfen sollte, stimmt das?</p>
<p>LG!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447355</guid><dc:creator><![CDATA[AndreasLeeb]]></dc:creator><pubDate>Thu, 19 Mar 2015 19:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 20:10:20 GMT]]></title><description><![CDATA[<p>AndreasLeeb schrieb:</p>
<blockquote>
<p>Ich habe gelesen, dass man in Konstruktoren nicht unbedingt Exceptions werfen sollte, stimmt das?</p>
</blockquote>
<p>Das stimmt nicht. Wenn das Object mit dem falschen Parameter nicht sinnvoll Konstruierbar ist bleibt dir nichts anderes übrig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447356</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Thu, 19 Mar 2015 20:10:20 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 20:20:03 GMT]]></title><description><![CDATA[<p>tkausl schrieb:</p>
<blockquote>
<p>AndreasLeeb schrieb:</p>
<blockquote>
<p>Ich habe gelesen, dass man in Konstruktoren nicht unbedingt Exceptions werfen sollte, stimmt das?</p>
</blockquote>
<p>Das stimmt nicht. Wenn das Object mit dem falschen Parameter nicht sinnvoll Konstruierbar ist bleibt dir nichts anderes übrig.</p>
</blockquote>
<p>Ok, danke für die Antwort!<br />
Also in solchen Fällen immer invalid_argument werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447358</guid><dc:creator><![CDATA[AndreasLeeb]]></dc:creator><pubDate>Thu, 19 Mar 2015 20:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 20:28:10 GMT]]></title><description><![CDATA[<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447359</guid><dc:creator><![CDATA[brassert]]></dc:creator><pubDate>Thu, 19 Mar 2015 20:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 20:31:37 GMT]]></title><description><![CDATA[<p>brassert schrieb:</p>
<blockquote>
<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
</blockquote>
<p>Ok, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447360</guid><dc:creator><![CDATA[AndreasLeeb]]></dc:creator><pubDate>Thu, 19 Mar 2015 20:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 21:16:14 GMT]]></title><description><![CDATA[<p>brassert schrieb:</p>
<blockquote>
<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
</blockquote>
<p>Pauschale Aussagen sind immer falsch.</p>
<p>In der Standradlib wird zwar in der Regel so verfahren, <a href="http://vector.at" rel="nofollow">vector.at</a> prüft aber z.B. dennoch, ob der Index gültig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447366</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 19 Mar 2015 21:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Thu, 19 Mar 2015 21:22:20 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Pauschale Aussagen sind immer falsch.</p>
</blockquote>
<p>Das war die Regel, wie man verfahren sollte und als Anfänger ist man gut damit geraten sich daran ausnahmslos zu halten.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>In der Standradlib wird zwar in der Regel so verfahren, <a href="http://vector.at" rel="nofollow">vector.at</a> prüft aber z.B. dennoch, ob der Index gültig ist.</p>
</blockquote>
<p>Das ist auch <em>einzige</em> Daseinsberechtigung von <code>vector::at</code> . Bei so allgemeinen Funktionen wie at() will man das manchmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447367</guid><dc:creator><![CDATA[brassert]]></dc:creator><pubDate>Thu, 19 Mar 2015 21:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 08:47:16 GMT]]></title><description><![CDATA[<p>Ich mach manchmal das hier:</p>
<pre><code class="language-cpp">struct month
{
	month() noexcept
		: from_zero(0)
	{
	}

	static boost::optional&lt;month&gt; create_checked(std::uint8_t from_zero) noexcept
	{
		if (from_zero &gt;= 12)
		{
			return boost::none;
		}
		return month(from_zero);
	}

	std::uint8_t index_from_zero() const noexcept
	{
		return from_zero;
	}

private:

	std::uint8_t from_zero;

	explicit month(std::uint8_t from_zero) noexcept
		: from_zero(from_zero)
	{
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447391</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 20 Mar 2015 08:47:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 10:33:41 GMT]]></title><description><![CDATA[<p>brassert schrieb:</p>
<blockquote>
<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
</blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Das war die Regel, wie man verfahren sollte und als Anfänger ist man gut damit geraten sich daran ausnahmslos zu halten.</p>
</blockquote>
<p>Was macht man wenn der Monat aus einer User-Eingabe kommt (bitte geben Sie ihr Geburtsdatum ein)? Dann bringt einem das Assert nix und wenn ich vor dem konstruieren prüfe hab ich den check zweimal drinnen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447406</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Fri, 20 Mar 2015 10:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 12:05:51 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
</blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Das war die Regel, wie man verfahren sollte und als Anfänger ist man gut damit geraten sich daran ausnahmslos zu halten.</p>
</blockquote>
<p>Was macht man wenn der Monat aus einer User-Eingabe kommt (bitte geben Sie ihr Geburtsdatum ein)? Dann bringt einem das Assert nix und wenn ich vor dem konstruieren prüfe hab ich den check zweimal drinnen...</p>
</blockquote>
<p>Assert im Konstruktor und Validierung der Eingabe.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Im Release ist das Assert weg aber die Eingabe muss immer noch geprüft werden, darum muss die bestehen bleiben.<br />
Und wenn du keine Code Duplizierung haben möchtest schreibe dir eine Validierung Funktion.</p>
<pre><code>bool validateMonth(std::uint8_t month)
{
// ...
}

std::uint8_t userInput = //...
if (!validateMonth(userInput))
{
   std::cout &lt;&lt; &quot;Kauf dir einen Kalender!&quot;;
}

struct month
{
   month(std::uint8_t from_zero) : from_zero(from_zero)
   {
      assert(validateMonth(m));
      // ...
   }
   // ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447415</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Fri, 20 Mar 2015 12:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 12:50:08 GMT]]></title><description><![CDATA[<p>C Newbie schrieb:</p>
<blockquote>
<p>happystudent schrieb:</p>
<blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
</blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Das war die Regel, wie man verfahren sollte und als Anfänger ist man gut damit geraten sich daran ausnahmslos zu halten.</p>
</blockquote>
<p>Was macht man wenn der Monat aus einer User-Eingabe kommt (bitte geben Sie ihr Geburtsdatum ein)? Dann bringt einem das Assert nix und wenn ich vor dem konstruieren prüfe hab ich den check zweimal drinnen...</p>
</blockquote>
<p>Assert im Konstruktor und Validierung der Eingabe.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Im Release ist das Assert weg aber die Eingabe muss immer noch geprüft werden, darum muss die bestehen bleiben.<br />
Und wenn du keine Code Duplizierung haben möchtest schreibe dir eine Validierung Funktion.</p>
<pre><code>bool validateMonth(std::uint8_t month)
{
// ...
}

std::uint8_t userInput = //...
if (!validateMonth(userInput))
{
   std::cout &lt;&lt; &quot;Kauf dir einen Kalender!&quot;;
}

struct month
{
   month(std::uint8_t from_zero) : from_zero(from_zero)
   {
      assert(validateMonth(m));
      // ...
   }
   // ...
}
</code></pre>
</blockquote>
<p>Wenn man eine validateMonth Methode macht, wie soll man dann in der Methode verfahren, wenn das Monat &lt; 1 oder &gt; 12 ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447421</guid><dc:creator><![CDATA[AndreasLeeb]]></dc:creator><pubDate>Fri, 20 Mar 2015 12:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 13:07:30 GMT]]></title><description><![CDATA[<p>AndreasLeeb schrieb:</p>
<blockquote>
<p>C Newbie schrieb:</p>
<blockquote>
<p>happystudent schrieb:</p>
<blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Nein! invalid_argument ist keine gute Lösung.</p>
<p>Negativer Monat vermeidet man durch unsigned. Zu hoher Monat prüft man mit assert. Exceptions sind für Ausnahmefälle, nicht Logikfehler!</p>
</blockquote>
<p>brassert schrieb:</p>
<blockquote>
<p>Das war die Regel, wie man verfahren sollte und als Anfänger ist man gut damit geraten sich daran ausnahmslos zu halten.</p>
</blockquote>
<p>Was macht man wenn der Monat aus einer User-Eingabe kommt (bitte geben Sie ihr Geburtsdatum ein)? Dann bringt einem das Assert nix und wenn ich vor dem konstruieren prüfe hab ich den check zweimal drinnen...</p>
</blockquote>
<p>Assert im Konstruktor und Validierung der Eingabe.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Im Release ist das Assert weg aber die Eingabe muss immer noch geprüft werden, darum muss die bestehen bleiben.<br />
Und wenn du keine Code Duplizierung haben möchtest schreibe dir eine Validierung Funktion.</p>
<pre><code>bool validateMonth(std::uint8_t month)
{
// ...
}

std::uint8_t userInput = //...
if (!validateMonth(userInput))
{
   std::cout &lt;&lt; &quot;Kauf dir einen Kalender!&quot;;
}

struct month
{
   month(std::uint8_t from_zero) : from_zero(from_zero)
   {
      assert(validateMonth(m));
      // ...
   }
   // ...
}
</code></pre>
</blockquote>
<p>Wenn man eine validateMonth Methode macht, wie soll man dann in der Methode verfahren, wenn das Monat &lt; 1 oder &gt; 12 ist?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code>bool validateMonth(std::uint8_t month)
{
   return month &gt;= 1 &amp;&amp; month &lt;= 12;
}
</code></pre>
<p>Die Behandlung von falschen month werten passiert natürlich beim Aufrufer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447423</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Fri, 20 Mar 2015 13:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 13:42:44 GMT]]></title><description><![CDATA[<p>Ok danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447427</guid><dc:creator><![CDATA[AndreasLeeb]]></dc:creator><pubDate>Fri, 20 Mar 2015 13:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 14:17:07 GMT]]></title><description><![CDATA[<p>@brassert<br />
Du hast halt <em>deine Meinung</em> hier presentiert als ob es ein Fakt wäre, und als ob es dazu nicht mehr zu sagen gäbe.</p>
<p>Es gibt aber oft gute Gründe nicht &quot;garbage in garbage out&quot; zu machen. Was mMn. auch der Grund dafür ist dass es <code>vector::at</code> überhaupt gibt.<br />
Und der vermutlich wichtigste Grund nicht &quot;garbage in garbage out&quot; zu machen ist, dass es hilft den Effekt von Fehlern einzugrenzen. Klar, Fehler sollten nicht im ausgelieferten Produkt drinnen sein. Das fehlerfreie (nicht triviale) Programm ist aber eher eine Wunschvorstellung, auf jeden Fall nichts wovon man ausgehen kann.</p>
<p>Und dann muss man sich fragen: was ist besser, ein &quot;garbage in garbage out&quot; Programm das im Falle des Falles gröbstens Mist baut (z.B. alle Daten löscht), oder ein Programm das im Falle des Falles mit einer mehr oder weniger verständlichen Fehlermeldung abbricht?</p>
<p>Das ganze ist natürlich auch oft ein Kompromiss zwischen Sicherheit und Performance.<br />
An Stellen wo Laufzeitprüfungen wirklich wichtig sind, ist <code>assert()</code> aber auf jeden Fall der falsche Weg, da im ausgelieferten Programm nix mehr davon übrig bleibt.<br />
Wenn man den Aufrufer &quot;dazu ermuntern will&quot; auf seiner Seite bereits dafür zu sorgen dass alles OK ist, kann man statt <code>assert(exp)</code> immer noch eine eigene Hilfsfunktion verwenden, die im Fall <code>!exp</code> eine Meldung ausgibt und danach <code>abort()</code> aufruft. Und die eben auch in einem Release-Build drinnen bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447430</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Mar 2015 14:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 14:20:05 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/869">@C</a> Newbie<br />
Für eine Funktion die true zurückliefert wenn ihr Argument eine gültige Monatsnummer ist, ist <code>validateMonth</code> mMn. ein schlechter Name.</p>
<p>Erstmal ist <code>validateXxx(arg)</code> nicht klar/eindeutig, es könnten mehrere Dinge damit gemeint sein. Folgende Verhalten wären denkbar:</p>
<ol>
<li>Die Methode validiert (im Sinn von: erklärt für gültig) <code>arg</code> als xxx. z.B. indem der übergebene Wert in einer Liste gültiger xxx-Werte eingetragen wird, wo andere Funktionen dann nachgucken können ob sie ihrerseits einen gültigen xxx-Wert übergeben bekommen haben.</li>
<li>Die Methode selbst ist als Assertion zu verstehen, macht also intern ein <code>assert(arg is a valid xxx)</code> .</li>
<li>Ähnlich (2) nur dass die Methode intern ein <code>if (arg is NOT a valid xxx) throw ...</code> macht.</li>
<li>Die Methode prüft die Validität von <code>arg</code> und gibt dann <code>true</code> bzw. <code>false</code> zurück.</li>
<li>Die Methode biegt <code>arg</code> so zurecht dass dabei ein gültiges xxx rauskommt. z.B. durch Clamping, Modulo-Arithmetik oder Ersetzen von ungültigen Werten mit einem Default.</li>
</ol>
<p>Deine <code>validateXxx(arg)</code> macht jetzt (4). Und das ist doppelt schlimm, denn für (4) gibt es einen super einfachen, oft verwendeten und auch 100% unmisverständlichen anderen Namen: <code>isValidXxx(arg)</code></p>
<p>(Und auch für (1), (2), (3) und (5) gibt es mMn. viel bessere Namen, wobei diese Fälle schon eine Spur schwieriger sind als (4))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447431</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Mar 2015 14:20:05 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 18:32:50 GMT]]></title><description><![CDATA[<p>Was ist eigentlich an meinem Ansatz mit dem statischen Pseudokonstruktor und <code>optional</code> so schlimm, dass der gänzlich ignoriert wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447477</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 20 Mar 2015 18:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 19:56:17 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Was ist eigentlich an meinem Ansatz mit dem statischen Pseudokonstruktor und <code>optional</code> so schlimm, dass der gänzlich ignoriert wird?</p>
</blockquote>
<p>Viel zu umständlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447489</guid><dc:creator><![CDATA[kiss]]></dc:creator><pubDate>Fri, 20 Mar 2015 19:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Fri, 20 Mar 2015 21:01:22 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/869">@C</a> Newbie<br />
Für eine Funktion die true zurückliefert wenn ihr Argument eine gültige Monatsnummer ist, ist <code>validateMonth</code> mMn. ein schlechter Name.</p>
<p>Erstmal ist <code>validateXxx(arg)</code> nicht klar/eindeutig, es könnten mehrere Dinge damit gemeint sein. Folgende Verhalten wären denkbar:</p>
<ol>
<li>Die Methode validiert (im Sinn von: erklärt für gültig) <code>arg</code> als xxx. z.B. indem der übergebene Wert in einer Liste gültiger xxx-Werte eingetragen wird, wo andere Funktionen dann nachgucken können ob sie ihrerseits einen gültigen xxx-Wert übergeben bekommen haben.</li>
<li>Die Methode selbst ist als Assertion zu verstehen, macht also intern ein <code>assert(arg is a valid xxx)</code> .</li>
<li>Ähnlich (2) nur dass die Methode intern ein <code>if (arg is NOT a valid xxx) throw ...</code> macht.</li>
<li>Die Methode prüft die Validität von <code>arg</code> und gibt dann <code>true</code> bzw. <code>false</code> zurück.</li>
<li>Die Methode biegt <code>arg</code> so zurecht dass dabei ein gültiges xxx rauskommt. z.B. durch Clamping, Modulo-Arithmetik oder Ersetzen von ungültigen Werten mit einem Default.</li>
</ol>
<p>Deine <code>validateXxx(arg)</code> macht jetzt (4). Und das ist doppelt schlimm, denn für (4) gibt es einen super einfachen, oft verwendeten und auch 100% unmisverständlichen anderen Namen: <code>isValidXxx(arg)</code></p>
<p>(Und auch für (1), (2), (3) und (5) gibt es mMn. viel bessere Namen, wobei diese Fälle schon eine Spur schwieriger sind als (4))</p>
</blockquote>
<p>Ja ich gebe dir recht das ich den Name suboptimal gewählt habe,<br />
jetzt würde mich noch interesieren welche Namen du für (1), (2), (3) und (5) nehmen würdest? (Und wie man bei der Signatur überhaupt auf (5) kommen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )<br />
(1) declareValid?<br />
(2) assertValid?<br />
(3) assureValid <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
(5) fitToValidValues <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447500</guid><dc:creator><![CDATA[C Newbie]]></dc:creator><pubDate>Fri, 20 Mar 2015 21:01:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unerlaubte Argumente anzeigen on Sat, 21 Mar 2015 01:15:01 GMT]]></title><description><![CDATA[<ol>
<li><code>markValidXxx, tagValidXxx, rememberValidXxxValue</code> - etwas in der Art</li>
<li>Ja, ganz klar <code>assertValidXxx</code></li>
<li>Schwierig wenn man es von (2) abgrenzen will (was ich nicht unbedingt nötig finde). &quot;Assure&quot; finde ich nicht ganz passend. <code>requireValidXxx</code> vielleicht.</li>
<li><code>makeValidXxx, forceValidXxx</code> oder <code>substituteInvalidXxxValues</code> . Bzw. auch spezifischer <code>clampToValidXxx</code> oder <code>substituteInvalidXxxWithDefault</code> .</li>
</ol>
<p>C Newbie schrieb:</p>
<blockquote>
<p>(Und wie man bei der Signatur überhaupt auf (5) kommen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )</p>
</blockquote>
<p>Das ist ne gute Frage. Müsste ich denjenigen fragen der den Code wo ich es gesehen habe geschrieben hat - dummerweise arbeitet der nicht mehr bei uns. Wobei ich zugeben muss dass ich mir beim Funktionsnamen gerade nicht 100% sicher bin. Ich glaube es war <code>validateXxx</code> , kann aber auch <code>verifyXxx</code> gewesen sein (was aber mMn. noch weniger Sinn machen würde).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447518</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 21 Mar 2015 01:15:01 GMT</pubDate></item></channel></rss>