Um alle Standardantworten zu vermeiden, auf die ich hätte googeln können, werde ich ein Beispiel geben, das Sie alle nach Belieben angreifen können.
C # und Java (und zu viele andere) haben mit vielen Typen ein Überlaufverhalten, das ich überhaupt nicht mag (zB type.MaxValue + type.SmallestValue == type.MinValue
zum Beispiel :) int.MaxValue + 1 == int.MinValue
.
Aber angesichts meiner bösartigen Natur werde ich diese Verletzung etwas beleidigen, indem ich dieses Verhalten auf einen überschriebenen DateTime
Typ ausdehne . (Ich weiß, dass DateTime
in .NET versiegelt ist, aber für dieses Beispiel verwende ich eine Pseudosprache, die genau wie C # ist, mit Ausnahme der Tatsache, dass DateTime nicht versiegelt ist.)
Die überschriebene Add
Methode:
/// <summary>
/// Increments this date with a timespan, but loops when
/// the maximum value for datetime is exceeded.
/// </summary>
/// <param name="ts">The timespan to (try to) add</param>
/// <returns>The Date, incremented with the given timespan.
/// If DateTime.MaxValue is exceeded, the sum wil 'overflow' and
/// continue from DateTime.MinValue.
/// </returns>
public DateTime override Add(TimeSpan ts)
{
try
{
return base.Add(ts);
}
catch (ArgumentOutOfRangeException nb)
{
// calculate how much the MaxValue is exceeded
// regular program flow
TimeSpan saldo = ts - (base.MaxValue - this);
return DateTime.MinValue.Add(saldo)
}
catch(Exception anyOther)
{
// 'real' exception handling.
}
}
Natürlich könnte ein Wenn dies genauso einfach lösen, aber die Tatsache bleibt, dass ich nicht verstehe, warum Sie keine Ausnahmen verwenden konnten (logischerweise kann ich sehen, dass Ausnahmen in bestimmten Fällen vermieden werden sollten, wenn Leistung ein Problem ist ).
Ich denke, in vielen Fällen sind sie klarer als Wenn-Strukturen und brechen keinen Vertrag, den die Methode macht.
IMHO ist die Reaktion „Niemals für den regulären Programmfluss verwenden“, die jeder zu haben scheint, nicht so gut unterbaut, wie es die Stärke dieser Reaktion rechtfertigen kann.
Oder irre ich mich?
Ich habe andere Beiträge gelesen, die sich mit allen Arten von Sonderfällen befassen, aber mein Punkt ist, dass daran nichts falsch ist, wenn Sie beide sind:
- klar
- Halten Sie den Vertrag Ihrer Methode ein
Erschieß mich.
if
Aussage überlegen ist . Sie werden das sehr schwer finden. Mit anderen Worten: Ihre Prämisse ist fehlerhaft, und die Schlussfolgerungen, die Sie daraus ziehen, sind daher falsch.