Как лучше оформить метод с предусловиями?
Есть два метода. Первый вариант:
public void MethodOne(uint value)
{
if (value < 100)
{
if (value % 2 != 0)
{
// код метода
}
else
{
throw new ExceptionTwo();
}
}
else
{
throw new ExceptionOne();
}
}
Второй вариант:
public void MethodTwo(uint value)
{
if (value >= 100)
throw new ExceptionOne();
if (value % 2 == 0)
throw new ExceptionTwo();
// код метода
}
Какой из них наиболее предпочтителен?
Ответы (1 шт):
Предполагается, что исключения могут повлиять на логику выполнения программы вне этого метода (на выброшенное исключение ExceptionOne - одно действие, на ExceptionTwo - другое действие)
Есть шанс, что в вашем случае вообще не должно быть исключений. Исключение - это не ошибка. Это реально неожиданная, исключительная ситуация.
- Двери лифта открылись - а лифта нет - это исключение.
- Вы нажали 16 этаж, а лифт по дороге остановился на 10-ом - не исключение.
Exception не стоит использовать в пути выполнения, который является обычным (не исключительным) с точки зрения кода.
Если у вас есть некий вызывающий код, который реально ожидает, что этот метод бросит исключение, и в котором есть нормальный, частый путь выполнения, который завязан на тип исключения - значит вам стоит переписать код без исключений, на возврат какого-нибудь Result вместо void.