Как стать автором
Обновить

Сколько return'ов должно быть в функции/методе?

Чулан
Недавно у меня с коллегой возник спор насчет количества return'ов, которое должно быть в функции/методе. Он считает что return в функции должен быть один, а результат можно подготавливать в локальной переменной. Я же считаю что следует ставить return в каждом месте где можно вернуть значение из функции.
А как думает уважаемое Хабрасообщество?

Например кусок кода на Java, который иллюстрирует подход, который мне по душе:
public static String getSystemLookAndFeelClassName() {
String systemLAF = (String)AccessController.doPrivileged(
new GetPropertyAction("swing.systemlaf"));
if (systemLAF != null) {
return systemLAF;
}
String osName = (String)AccessController.doPrivileged(
new GetPropertyAction("os.name"));

if (osName != null) {
if (osName.indexOf("Windows") != -1) {
return "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
}
else {
String desktop = (String)AccessController.doPrivileged(
new GetPropertyAction("sun.desktop"));
if ("gnome".equals(desktop)) {
// May be set on Linux and Solaris boxs.
return "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
}
if ((osName.indexOf("Solaris") != -1) ||
(osName.indexOf("SunOS") != -1)) {
return "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
}
}
return getCrossPlatformLookAndFeelClassName();
}

* This source code was highlighted with Source Code Highlighter.

В стиле моего коллеги этот код выглядел бы так:
public static String getSystemLookAndFeelClassName() {
String result = getCrossPlatformLookAndFeelClassName();

String systemLAF = (String)AccessController.doPrivileged(
new GetPropertyAction("swing.systemlaf"));
if (systemLAF != null) {
result = systemLAF;
}
String osName = (String)AccessController.doPrivileged(
new GetPropertyAction("os.name"));

if (osName != null) {
if (osName.indexOf("Windows") != -1) {
result = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
}
else {
String desktop = (String)AccessController.doPrivileged(
new GetPropertyAction("sun.desktop"));
if ("gnome".equals(desktop)) {
// May be set on Linux and Solaris boxs.
result = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
}
if ((osName.indexOf("Solaris") != -1) ||
(osName.indexOf("SunOS") != -1)) {
result = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
}
}
return result;
}


* This source code was highlighted with Source Code Highlighter.


UPD: первый вариант — это функция, взятая без изменений из исходников Sun JDK 6.0, второй вариант — это наскоро переделаный мною первый вариант по стилю моего коллеги.
Теги:returnфункцияметоды
Хабы: Чулан
Всего голосов 26: ↑19 и ↓7 +12
Просмотры1K

Похожие публикации

PHP-программист Yii
от 150 000 ₽Max.CreditСанкт-ПетербургМожно удаленно
Продуктовый аналитик
от 200 000 ₽BestDoctorМоскваМожно удаленно
Программист C++ (ПО для беспилотных летательных аппаратов)
от 150 000 ₽КТ-Беспилотные СистемыСанкт-Петербург

Лучшие публикации за сутки