leshqow
@leshqow
-l-

DivideByZeroException(). Зачем нужен?

В чем преимущество DivideByZeroException() перед простым IFом ? Я могу с помощью if на 0 проверить.
public double CalcFraction1 (double x, double y)  { 
        var numerator = Math.Abs(x) - Math.Abs(y);
        var denominator = (1 + Math.Abs(x) * Math.Abs(y));
        if (denominator == 0)   { 
            throw new DivideByZeroException();
        }
        return numerator / denominator;
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
@aynur_safin
https://msdn.microsoft.com/ru-ru/library/system.di...
Деление значения с плавающей запятой на ноль не вызывает исключения;

В чем преимущество DivideByZeroException() перед простым IFом ? Я могу с помощью if на 0 проверить.

Ну проверите вы на ноль, и то что вернете из функции? Если ноль, то это будет неверный результат.
Поэтому проверяем на ноль вручную и кидаем исключение, это лучше чем получить неверное значение.
Если не кидать исключение, то вернется "Infinity", оно вам надо? )
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@MoonMaster
Программист и этим все сказано
Если кратко то стиль кода.
Вы должны придерживаться парадигме ООП и если вы проверяете IFом условие, что у вас при делении не ноль, то это очень плохой то программирования.
Тем более при использовании exception вы вставляете в логику try...catch и тем самым можете перехватывать исключения и при необходимости передавать их компоненту который ответственнен за это
Ответ написан
@HowardRoark
Full stack developer
Не вижу смысла проверять на ноль, если в теле условия только выбрасывается исключение.
CLR и без вас выбросит DivideByZeroException, если denominator будет равен нулю.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Два примера:
1. некий огромный набор данных, по которому нечто рассчитывается
в исходных данных ноль недопустим - exception подразумевающее "все пропало" и прекращение действий (выбран не тот файл и т.п.)

2. тот же набор данных
в процессе сложных вычислений за счет округления один из делителей может округлиться до нуля... если это предсказуемо и допустимо - можно ветвиться if-ом и присваивать результату такого деления "псевдобесконечность" - например максимальное значения int и т.п. и далее продолжать вычисления
Ответ написан
Комментировать
@Got_Oxidus
Учусь
Выбрасывайте ArgumentException, он понятнее для пользователя функции, т.к. потребитель не знает, что внутри функции, и это его запутает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы