Недавно у меня с коллегой возник спор насчет количества return'ов, которое должно быть в функции/методе. Он считает что return в функции должен быть один, а результат можно подготавливать в локальной переменной. Я же считаю что следует ставить return в каждом месте где можно вернуть значение из функции.
А как думает уважаемое Хабрасообщество?
Например кусок кода на Java, который иллюстрирует подход, который мне по душе:
В стиле моего коллеги этот код выглядел бы так:
UPD: первый вариант — это функция, взятая без изменений из исходников Sun JDK 6.0, второй вариант — это наскоро переделаный мною первый вариант по стилю моего коллеги.
А как думает уважаемое Хабрасообщество?
Например кусок кода на 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, второй вариант — это наскоро переделаный мною первый вариант по стилю моего коллеги.