Возврат документа в метод - PullRequest
0 голосов
/ 29 августа 2018

При возврате объекта (как Document) в метод и создание не implements AutoCloseable Я часто вижу объявление в первой строке объекта и возвращение его в конце:

public Document myMethod() {
 Document document = null
 try {
    document  = docFactory.newDocumentBuilder().newDocument();
    //...work on document 
 } catch(Exception e) {
   // Handle Exception
 }
 return document;
}

Кажется, что следующее правило всегда корректно, создайте и верните в предложение try (и возможно извлечь этот код в метод)

public Document myMethod() {

 try {
    Document document  = docFactory.newDocumentBuilder().newDocument();
    //...work on document
    return document;
 } catch(Exception e) {
    // Handle Exception
 }
 return null;
}

Я что-то упустил? (вы можете относиться к случаям, когда null может быть значением по умолчанию, но оно менее значимо)

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

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

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

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

0 голосов
/ 29 августа 2018

Большинство ответов / комментариев здесь предполагают, что между этими двумя подходами нет реальной разницы и что они одинаковы по функциям, и это просто вопрос предпочтений.

Это не так, есть очень важное функциональное отличие. Если в //...work on document возникает исключение, первое решение вернет незаконченный или, возможно, поврежденный документ (если только не return null; в блоке // Handle Exception), тогда как второй вариант вернет ноль.

Поэтому я бы порекомендовал использовать вариант 2), так как он снижает риск возврата испорченного документа из метода, который вы можете сразу не заметить и может привести к проблемам в другом месте, тогда как возврат null - это четкое указание на то, что что-то пошло не так в вашем методе.

0 голосов
/ 29 августа 2018

Помимо того, что у 2-го кодового блока есть предложение catch(Exception e), они фактически эквивалентны.

Для этого кода предпочтительнее, если вы хотите

  • Инициализировать переменную в null за пределами блока try и вернуть объект в конце
  • Объявить переменную внутри блока try и вернуть null в конце

Если был случай, когда вы хотели работать с Object o вне блока try, вам нужно было бы инициализировать переменную вне блока, чтобы она была соответствующим образом распределена и доступна.

Некоторые кодеры придерживаются соглашения, в котором они пытаются использовать только 1 оператор return для каждого метода. (Я не один из них).

То, о чем вы спрашиваете, кажется вопросом личных предпочтений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...