Pull to refresh

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

Reading time4 min
Views4.2K
Недавно у меня с коллегой возник спор насчет количества 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, второй вариант — это наскоро переделаный мною первый вариант по стилю моего коллеги.
Tags:
Hubs:
Total votes 26: ↑19 and ↓7+12
Comments59

Articles