Чтобы избежать всех стандартных ответов, с которыми я мог столкнуться, я приведу пример, который вы можете атаковать по своему усмотрению.
С# и Java (и слишком многие другие) имеют множество типов некоторых типов "переполнения", которые мне вообще не нравятся (например, type.MaxValue + type.SmallestValue == type.MinValue
например: int.MaxValue + 1 == int.MinValue
).
Но, увидев мою порочную природу, я добавлю оскорбление этой травмы, расширив это поведение, скажем, тип Overridden DateTime
. (Я знаю, что DateTime
запечатан в .NET, но для этого примера Im использует псевдоязык, который точно такой же, как С#, за исключением того факта, что DateTime не запечатан).
Переопределенный метод Add
:
/// <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.
}
}
Конечно, если бы это можно было решить так же просто, но факт остается фактом: я просто не понимаю, почему вы не можете использовать исключения (логически то есть, я вижу, что когда производительность является проблемой, в некоторых случаях исключения должны быть избегать).
Я думаю, во многих случаях они более понятны, чем if-структуры и не нарушают какой-либо контракт, который делает этот метод.
ИМХО "Никогда не использовать их для регулярного потока программ", все, кажется, не так хорошо подстраиваются, поскольку сила этой реакции может оправдаться.
Или я ошибаюсь?
Я читал другие сообщения, относящиеся ко всем специальным случаям, но я не думаю, что если вы оба:
- Очистить
- Почитайте договор своего метода.
Стреляй меня.