Возврат из метода с неявным или явным «else» или с единственным оператором «return»? - PullRequest
18 голосов
/ 06 августа 2010

Некоторые люди считают несколько операторов возврата плохим стилем программирования. Хотя это справедливо для более крупных методов, я не уверен, приемлемо ли это для коротких. Но есть еще один вопрос: должен ли else быть явно записан, если в предыдущем if был оператор возврата?

Неявный else:

private String resolveViewName(Viewable viewable) {
    if(viewable.isTemplateNameAbsolute())
        return viewable.getTemplateName();
    return uriInfo.getMatchedResources().get(0).getClass().toString();
}

Явный else:

private String resolveViewName(Viewable viewable) {
    if(viewable.isTemplateNameAbsolute())
        return viewable.getTemplateName();
    else
        return uriInfo.getMatchedResources().get(0).getClass().toString();
}

Технически else здесь не нужен, но это делает смысл более очевидным.

И, возможно, самый чистый подход с одним возвратом:

private String resolveViewName(Viewable viewable) {
    String templateName;
    if(viewable.isTemplateNameAbsolute())
        templateName = viewable.getTemplateName();
    else
        templateName = uriInfo.getMatchedResources().get(0).getClass().toString();
    return templateName;
}

Какой из них вы бы предпочли? Другие предложения?

Ответы [ 14 ]

1 голос
/ 06 августа 2010

Я предпочитаю первый.

Или ... вы можете использовать if return else return для одинаково важных бифуркаций и if return return для особых случаев.

Когда у вас есть утверждения (if p==null return null) тогда первый из них является наиболее понятным на сегодняшний день.Если у вас есть одинаково взвешенные варианты ... я нахожу в порядке использовать явное else.

0 голосов
/ 06 августа 2010

Считать множественные операторы возврата «плохим стилем» - это длинная, давно дискредитированная ошибка.Они могут сделать код намного понятнее и более понятным, чем явные переменные возвращаемого значения. Особенно в более крупных методах.

В вашем примере я бы счел второй вариант наиболее чистым, поскольку симметричная структура кода отражает его семантику, он короче и избегает ненужных переменных.

0 голосов
/ 06 августа 2010

Я предпочитаю второй вариант, потому что для меня он самый быстрый для чтения.

Я бы избежал третьего варианта, потому что он не добавляет ясности или эффективности.

Первый вариант тоже подходит, но по крайней мере я бы поставил пустую строку между первым битом (if и возвращаемым с отступом) и вторым оператором return.все сводится к личным предпочтениям (как и многие вещи в стиле программирования).

0 голосов
/ 06 августа 2010

Конечно, людям есть, что сказать о стиле программирования, но не беспокойтесь о чем-то относительно тривиальном для целей вашей программы.

Лично мне нравится обходиться без остального.Если кто-то просматривает ваш код, высоки шансы, что он не будет слишком смущен без остального.

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