Pour éviter toutes les réponses standard sur lesquelles j'aurais pu googler, je vais vous donner un exemple que vous pouvez tous attaquer à volonté.
C # et Java (et trop d'autres) ont avec beaucoup de types des comportements de «débordement» que je n'aime pas du tout (par type.MaxValue + type.SmallestValue == type.MinValue
exemple:) int.MaxValue + 1 == int.MinValue
.
Mais, vu ma nature vicieuse, j'ajouterai une insulte à cette blessure en étendant ce comportement à, disons, un DateTime
type Overridden . (Je sais que DateTime
c'est scellé dans .NET, mais pour le bien de cet exemple, j'utilise un pseudo langage qui est exactement comme C #, sauf pour le fait que DateTime n'est pas scellé).
La Add
méthode remplacée :
/// <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.
}
}
Bien sûr, un if pourrait résoudre cela tout aussi facilement, mais le fait reste que je ne vois pas pourquoi vous ne pouvez pas utiliser d'exceptions (logiquement, c'est-à-dire que lorsque les performances sont un problème, dans certains cas, les exceptions doivent être évitées ).
Je pense que dans de nombreux cas, ils sont plus clairs que les structures if et ne rompent aucun contrat de la méthode.
À mon humble avis, la réaction «Ne jamais les utiliser pour le déroulement régulier du programme» que tout le monde semble avoir n'est pas aussi bien insuffisante que la force de cette réaction peut le justifier.
Ou est-ce que je me trompe?
J'ai lu d'autres articles traitant de toutes sortes de cas particuliers, mais mon point est qu'il n'y a rien de mal à cela si vous êtes tous les deux:
- Clair
- Respectez le contrat de votre méthode
Tirez sur moi.
if
déclaration beaucoup plus courte et auto-documentée . Vous trouverez cela très difficile. En d'autres termes: votre prémisse même est imparfaite, et les conclusions que vous en tirez sont donc fausses.