Лучшая практика для Порядка заявления IF / ELSE (когда один случай не разрешен) - PullRequest
1 голос
/ 22 июня 2010

В простом случае if-else (где знаменатель дроби нужно будет проверять на нулевое значение для каждой записи), существует ли правильное расположение операторов?

Например:

    if (!(denominator == 0))
    {
        quotient = numerator / denominator;
        System.out.println(numerator + " / " + denominator + " = " + quotient);
    }
    else
    {
        System.out.println("Division by zero is not allowed.");
    }

или

    if (denominator == 0)
    {
        System.out.println("Division by zero is not allowed.");
    }
    else
    {
        quotient = numerator / denominator;
        System.out.println(numerator + " / " + denominator + " = " + quotient);
    }

Я знаю, что это тривиальный пример, но мне любопытно, есть ли какая-либо польза от рассмотрения порядка операторов if-else (в случае, подобном описанному выше). Для менее тривиального тестирования входных данных / значений я могу понять согласованный ответ, предложенный здесь: Наилучшая практика по порядку утверждений IF / ELSE .

Заранее извиняюсь, если это плохой вопрос (или тот, у которого должен быть очевидный ответ). Я намерен повысить общую эффективность моего кодирования. Хотя я сомневаюсь, что между двумя приведенными мною примерами есть существенная разница. Мой анализ новичков показывает, что знаменатель будет проверяться на ноль в любом случае, поэтому сводит на нет все преимущества тестирования для «нормального случая». Пожалуйста, поправьте / просветите меня, если я ошибаюсь.

ТИА

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

В другом ответе здесь упоминается Code Complete (отличная книга) как пример самого нормального случая в первую очередь. Я полностью согласен с этим. Тем не менее, поскольку ваше поведение не «если (нормальный) doSomething (в редких случаях) doSomethingRarer», я не думаю, что это применимо. Совет Инстеда Макконнелла о досрочном выходе кажется подходящим:

/* Probably should be throw new Exception(".."); */
if (denominator == 0) 
    return "Division by zero is not allowed."; 


quotient = numerator / denominator; 
return(numerator + " / " + denominator + " = " + quotient);
2 голосов
/ 22 июня 2010

У Стива МакКоннелла есть несколько советов по Code Complete. Он предлагает, чтобы ненормальная или наиболее часто используемая ветвь оператора if должна отображаться первой. (Ваш первый пример кода.)

В отношении производительности не должно быть никакой разницы.

0 голосов
/ 22 июня 2010

В конце концов, задача компилятора - заказывать подобные вещи для максимальной производительности.Когда дело доходит до детализации этой тривиальной задачи, ваша основная задача почти всегда должна заключаться в простом и читаемом коде.Так что второй пример получил бы мой голос, потому что (немного) меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...