2015-09-02 4 views
0

Оператор return используется в методах пустот, чтобы вырваться из логики здесь. Проблема заключается в том, что потребители метода не знали бы, будет ли логика в методе работать полностью или нет, когда мы это сделаем. Однако мой архитектор и команды не согласны с этим. Причина в том, что текущий потребитель в этом случае не заботится об итогах.Является ли хорошей практикой возврат недействительных методов?

Я думаю, что это кодирование анти-шаблона. Это похоже на то, что есть исключение из-за этого. Каково мнение каждого по этому поводу?

Существующий код:

Private void XXX(final String parameter) { 
     try { 
      if (parameter==null){ 
       return; 
      } 
      .... 
    } 

Моя версия

Private boolean XXX(final String parameter) { 
     try { 
      if (parameter==null){ 
       return false; 
      } 
      .... 
    return true; 
    } 
+0

Инкапсуляция - это все, что связано с покупателем, не зная, в какой именно логике. Что в этом плохого? – Bergi

ответ

0

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

Образцы кода, которые вы предоставили, мне кажутся анти-шаблонами.

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

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

Первая версия кода:

Private void XXX(final String parameter) { 
    try { 
     if (parameter==null){ 
      return; 
     } 
     .... 
} 

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

Вторая версия кода:

Private boolean XXX(final String parameter) { 
    try { 
     if (parameter==null){ 
      return false; 
     } 
     .... 
return true; 
} 

Кажется, чтобы вернуть boolean как код выхода «работал» или «не работает». Это не очень полезно, потому что, если это не сработало, вы не знаете, почему. Также он требует, чтобы вызывающий код проверял возвращаемое значение, которое они могут забыть сделать.

0

Нет ничего плохого в том, что явный возврат для метода void. Тем не менее, это хорошая общая практика - если возможно - иметь только один возврат из метода (хотя вы можете иметь более одного, если это требует логика, и вы пишете код как можно проще - без блоков - так, чтобы общий поток не обфускается).

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

Если это первый, я предлагаю вам использовать аннотацию (@NotNull), чтобы гарантировать, что параметр не равен нулю. К сожалению, есть несколько из них, поэтому вам нужно будет выяснить, что лучше всего подходит вашей архитектуре.

Если вы действительно не хотите использовать аннотацию (а значение null считается ошибкой), то генерируйте исключение.