Есть ли недостаток в том, чтобы положить большую часть вашего кода для вашей функции в try statement
. Если я делаю что-то, что требует try statement
, я обычно делаю много работы для этой функции внутри оператора try, потому что обычно я объявляю свои переменные и не могу использовать их вне этой области, если я это сделаю. Это распространено и принято? Обычно люди объявляют переменную до того, как не инициализируют их, чтобы они не делали все (включая вызовы других функций) внутри try statement
? Или это не имеет значения, если он очень длинный?Заявления о длинных попытках
ответ
Метод должен сделать одну вещь и сделать это хорошо. В этом случае ваш метод делает две вещи: бизнес-логики и обработки ошибок:
public Foo bar() {
try {
//business logic that may throw
//...
//end even more
} catch(BuzzException e) {
//Error handling
}
}
Очень часто я ловлю себя извлекая содержимое try
блока в отдельный метод без обработки ошибок:
public Foo bar() {
try {
return unsafeBar();
} catch(BuzzException e) {
//Error handling
}
}
public Foo unsafeBar() throws BuzzException {
//business logic that may throw
//...
//end even more
}
It важно, если это очень долго, но не по той причине, о которой вы думаете. Это важно, потому что это делает ваш код трудным для чтения и тестирования. Вы бы лучше реорганизовать его несколькими способами:
public void doComplexThing() {
try {
SomeObject o1 = doSomethingLessComplex();
SomeOtherObject o2 = doSomethingElse(o1);
doFinalThing(o2);
}
catch (SomeException e) {
// handle the exception
}
}
Если try
блок получает немного долго, это хорошая идея, чтобы изолировать вызовы, которые на самом деле бросали исключения в свои собственные методы. Таким образом, вы индивидуально решаете, что может быть несколько видов исключений, которые бросаются в этот блок.
Покрытие многих исключений в try
с простым старым catch(Exception ex)
приведет к головной боли позже, если вы пытаетесь проверить или найти «загадочную» ошибку. Это не говоря уже о таких вещах, как правильная обработка ресурсов/потоков, что и есть многие проверенные исключения.
Являясь старшим программистом, я понимаю, что путаница между использованием try catch прекрасно выполняется над операторами, которые бросают исключение против четкости кода.
Здесь я бы наклонился к try catch over the statements that need it
.
Сначала давайте понимаем необходимость попытки поймать. Мы ловим исключения, так как мы хотим справиться с этим прямо здесь и сейчас. Если мы не бросим его вызывающему. Мы бросаем его так, чтобы мы не забывали обработать его позже. Никогда, Oh!, let me finish this method and then I will worry about the exception handling later
. Сделайте это, пока вы код, подумайте, вам нужно распечатать ошибку и вернуть null, или вам нужно, чтобы пользователь знал, что что-то прищурилось? Вы хотите объединить все проблемы подключения с recycle the connection
? Если да, то бросьте свое собственное исключение. Но не забудьте справиться с этим. Игнорирование и неправильная обработка исключений является основной причиной увеличения затрат на обслуживание проектов и сердечного ожога. Это разница между хорошим продуктом и неаккуратным продуктом.
Что касается аккуратности кода, я обнаружил, что комментарии в блоках catch делают все это стоящим. Да, будет кто-то старше вас, кто не поймет важность улавливания точного заявления и поймает catch (Exception e)
напрямую. Я бы сказал, жалко. Но при кодировании вы должны придерживаться своей этики. Сделайте это правильно и сделайте это ОДИН РАЗ.
- 1. Лучшее решение для двух заявлений о попытках?
- 2. Могу ли я попробовать несколько вещей, не вставляя заявления о попытках?
- 3. Подготовленные заявления о mysqli?
- 4. Заявления о закодированных переключателях
- 5. изменение заявления о печати
- 6. использование заявления о ввозе
- 7. opennms Заявления о регистрации
- 8. Вложенные заявления о делах
- 9. Перерыв для заявления о случаях
- 10. Хеши и заявления о случаях
- 11. Записи и заявления о случаях
- 12. Последовательность после заявления о возврате?
- 13. Объяснить использование заявления о поставке
- 14. Пропуск заявления о попытке уловить?
- 15. Цепочка ответственности. Заявления о действиях
- 16. заявления о делах в lambdas
- 17. Переводы и заявления о назначении
- 18. Вопрос о длинных и разрушительных ветвях
- 19. Предоставление длинных подсказок о свойствах в командлете
- 20. Сложение длинных значений показывают разные о/р
- 21. Разрабатывают: Регистрация журнала в попытках
- 22. Большие/меньшие заявления о неисправности в VBA?
- 23. Разрушение генератора при возникновении заявления о разрыве
- 24. Заявления о состоянии в визитной карточке
- 25. частичных заявления о не должно указать
- 26. Заявления о тревогах в Android откладываются
- 27. Простая помощь о сохранении заявления в SAS
- 28. ставит комментарии в середине заявления о появлении
- 29. Является ли это запах заявления о переключении?
- 30. Быстрое заявление о том, если заявления
Не уверен, что вы делаете, но вы можете инициализировать переменную до некоторого значения по умолчанию вне блока try. – nhahtdh
Если это вас раздражает, вы всегда можете добавить предложение 'throws' в свой заголовок метода и обернуть только вызов метода в' try/catch'-block. – 11684
@nhahtdh Или не инициализироваться вообще: 'int whatever;' действителен в Java. – 11684