Para evitar todas as respostas padrão que eu poderia ter pesquisado no Google, darei um exemplo que todos vocês podem atacar à vontade.
C # e Java (e muitos outros) têm, com muitos tipos, alguns dos comportamentos de 'estouro' que eu não gosto (por type.MaxValue + type.SmallestValue == type.MinValue
exemplo int.MaxValue + 1 == int.MinValue
:).
Mas, vendo minha natureza cruel, adicionarei algum insulto a essa lesão expandindo esse comportamento para, digamos, um DateTime
tipo Substituído . (Sei que DateTime
está selado no .NET, mas pelo exemplo deste exemplo, estou usando uma pseudo linguagem que é exatamente como C #, exceto pelo fato de que o DateTime não está selado).
O Add
método substituído :
/// <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.
}
}
É claro que um if poderia resolver isso da maneira mais fácil, mas o fato é que eu simplesmente não consigo entender por que você não pode usar exceções (logicamente, ou seja, eu posso ver que quando o desempenho é um problema, em certos casos as exceções devem ser evitadas). )
Eu acho que em muitos casos eles são mais claros que as estruturas if e não quebram nenhum contrato que o método está fazendo.
IMHO, a reação "Nunca os use para o fluxo regular do programa" que todo mundo parece ter não está tão bem construída quanto a força dessa reação pode justificar.
Ou estou enganado?
Eu li outras postagens, lidando com todos os tipos de casos especiais, mas o que quero dizer é que não há nada errado com isso, se vocês dois são:
- Claro
- Honre o contrato do seu método
Atire em mim.
if
declaração muito mais curta e auto-documentada . Você achará isso muito difícil. Em outras palavras: sua própria premissa é falha e as conclusões que você tira dela são, portanto, erradas.