Проектирование кода: использование return в switch

178
26 октября 2017, 07:13

Какой код с точки зрения проектирования более правильный

Такой:

public List<String> getStringList(int expression){
  List<String> list;
  switch(expression){
   case 1:
     list = getList1();
     break;
   case 2:
     list = getList2();
     break;
   ...
  }
  return list;
}

Или такой:

public List<String> getStringList(int expression){
  switch(expression){
   case 1:
     return getList1();
   case 2:
     return getList2();
   ...
  }
}

В данный момент мы никак не изменяем и не предопалагаем, что нам нужно изменять список list в функции getStringList.

Хотелось бы прочитать обоснованный ответ в пользу того или иного варианта.

В первом случае у нас одна точка выхода их функции, в switch мы только присваиваем переменную, которую возвращаем, а во втором случае у нас получается несколько точек выхода.

Answer 1

В языках с RAII или try/finally нет никакого правила, по которому предпочтительнее единственная точка возврата из функции. Поэтому писать надо так, как легче читать, никакого другого правила тут нет.

В вашем случае, как мне кажется, введение дополнительной переменной служит только цели единственной точки возврата в функции, так что я бы предпочёл более короткий вариант с return из середины switch. Введение дополнительной переменной заставляет читателя помнить о результате до конца switch'а, и держать наличие его в голове, в то время как ранний return позволяет сразу отбросить этот случай.

Но это, снова-таки, вопрос личных литературных предпочтений. Пишите, как вам кажется лучше.

READ ALSO
Spring BCryptPasswordEncoder некорректно работает

Spring BCryptPasswordEncoder некорректно работает

Я использую BCryptPasswordEncoder для шифрования пароля при регистрации на сайтеНо есть проблема, при логине пароль пользователя не подтверждается

226
Отловить первый запуск приложения

Отловить первый запуск приложения

Объясните пожалуйста в теории, как отловить первый запуск приложения? Читал тут, не то, все слишком громоздко

234
Считывание текста из файла в нужной кодировке

Считывание текста из файла в нужной кодировке

Необходимо считать строки из файла и записать их в массив, а потом отобразить на лейблеНо почему-то русскую кодировку не распознает

308