Per evitare tutte le risposte standard su cui avrei potuto cercare su Google, fornirò un esempio che tutti voi potete attaccare a piacimento.
C # e Java (e troppi altri) hanno con molti tipi alcuni comportamenti "a trabocco" che non mi piacciono affatto (ad type.MaxValue + type.SmallestValue == type.MinValue
esempio:) int.MaxValue + 1 == int.MinValue
.
Ma, vista la mia natura viziosa, aggiungerò un po 'di insulto a questa lesione espandendo questo comportamento a, diciamo un DateTime
tipo Overridden . (So che DateTime
è sigillato in .NET, ma per il bene di questo esempio, sto usando un linguaggio pseudo che è esattamente come C #, tranne per il fatto che DateTime non è sigillato).
Il Add
metodo ignorato :
/// <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.
}
}
Naturalmente un if potrebbe risolverlo altrettanto facilmente, ma resta il fatto che non riesco proprio a capire perché non si possano usare le eccezioni (logicamente, posso vedere che quando le prestazioni sono un problema che in alcuni casi le eccezioni dovrebbero essere evitate ).
Penso che in molti casi siano più chiari delle strutture if e non rompano alcun contratto che il metodo sta facendo.
IMHO la reazione "Non usarli mai per un flusso di programma regolare" che tutti sembrano avere non è così ben costruita come la forza di quella reazione può giustificare.
O mi sbaglio?
Ho letto altri post, trattando tutti i tipi di casi speciali, ma il mio punto è che non c'è nulla di sbagliato in questo se entrambi:
- Chiaro
- Onora il contratto del tuo metodo
Colpiscimi.
if
un'istruzione molto più breve e autocompattante . Lo troverai molto difficile. In altre parole: la tua premessa è errata e le conclusioni che ne trai sono quindi sbagliate.