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