Как я должен вернуть значение из функции? - PullRequest
0 голосов
/ 11 января 2012

Здесь я вижу три способа:

1) заставить функцию возвращать это значение явно

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

3) сгенерировать исключение из этой функции, которое будет содержать результат.

Для себя я вижу первый выбор более предпочтительным, потому что он простой, интуитивно понятный и прямой.

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

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

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

Ответы [ 4 ]

5 голосов
/ 11 января 2012

Вы абсолютно хотите вариант № 1. Исключения не являются непредсказуемыми; если вы используете их правильно, они на самом деле полностью предсказуемы. В зависимости от ошибки вы можете выдавать различные типы исключений (FileNotFoundException, IllegalArgumentException, SomeConditionSpecificToMyAppException и т. Д.), И эти исключения могут содержать любую информацию об ошибке или диагностическую информацию, которую необходимо передать.

Вот хороший раздел в руководстве по Java SE по исключениям: http://docs.oracle.com/javase/tutorial/essential/exceptions/

2 голосов
/ 11 января 2012

Java-методы имеют , возвращают значения по причине: возвращать свои результаты В подавляющем большинстве случаев № 1 должен быть вашим только выбором. Даже если вы хотите вернуть объект-оболочку, например, потому что вам нужно вернуть несколько значений, вам, вероятно, нужно просто return вещь ...

Исключения есть только они: они создаются в исключительных (то есть ненормальных) обстоятельствах. Поскольку традиционно создание исключения также подразумевает снижение производительности, исключения не должны создаваться при нормальной работе.

Почему вы пытаетесь запутать себя?

EDIT:

С другой стороны, исключения вполне подходят для редких / ненормальных условий:

  • Они имеют встроенную поддержку для генерации отладочной информации. Получение трассировки стека - полдела в борьбе с большинством ошибок.

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

  • Исключения позволяют относительно прозрачно передавать условия ошибок в цепочку вызовов методов, что позволяет размещать код обработки ошибок с такой степенью детализации, как это необходимо.

  • Исключения являются стандартным способом устранения ошибок в Java. Этого должно быть достаточно для большинства программистов. Пожалуйста, уважайте людей, которым придется работать с вашим кодом, и не нарушайте такие базовые соглашения, заново изобретая колесо ...

1 голос
/ 11 января 2012

Пожалуйста, прочитайте Code Complete от Стива Макконнелла.Это все там.

1 голос
/ 11 января 2012

Я бы использовал вариант 1 почти каждый раз. Ничто не мешает вам бросить Исключение, как требуется.

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