Para evitar todas las respuestas estándar que podría haber buscado en Google, proporcionaré un ejemplo que todos pueden atacar a voluntad.
C # y Java (y muchos otros) tienen muchos tipos de comportamiento de 'desbordamiento' que no me gusta en absoluto (por type.MaxValue + type.SmallestValue == type.MinValue
ejemplo, por ejemplo int.MaxValue + 1 == int.MinValue
).
Pero, visto mi naturaleza viciosa, agregaré un insulto a esta lesión al expandir este comportamiento a, digamos un DateTime
tipo Anulado . (Sé que DateTime
está sellado en .NET, pero por el bien de este ejemplo, estoy usando un pseudo lenguaje que es exactamente como C #, excepto por el hecho de que DateTime no está sellado).
El Add
método anulado :
/// <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.
}
}
Por supuesto, un if podría resolver esto con la misma facilidad, pero el hecho es que no puedo ver por qué no se pueden usar excepciones (lógicamente, puedo ver que cuando el rendimiento es un problema que en ciertos casos se deben evitar las excepciones) )
Creo que en muchos casos son más claros que las estructuras if y no rompen ningún contrato que el método esté haciendo.
En mi humilde opinión, la reacción de "Nunca los use para el flujo regular del programa" que todo el mundo parece tener no está tan mal construida como la fuerza de esa reacción puede justificar.
¿O me equivoco?
He leído otras publicaciones que tratan todo tipo de casos especiales, pero mi punto es que no hay nada de malo si ambos son:
- Claro
- Honra el contrato de tu método
Dispararme.
if
declaración mucho más breve y autodocumentada . Encontrarás esto muy difícil. En otras palabras: su premisa es defectuosa y, por lo tanto, las conclusiones que saca de ella son erróneas.