이것은 관련 Q : 반환 스타일이 나쁘거나 위험한 작업을 수행하기 위해 finally 절을 사용합니까?
참조 된 Q에서 finally 코드는 사용 된 구조 및 프리 페치의 필요성과 관련이 있습니다. 내 질문은 조금 다르며 더 많은 사람들에게 독창적이라고 생각합니다. 내 특정 예는 C # winform 앱이지만 C ++ / Java 최종 사용에도 적용됩니다.
블록에 묻힌 예외 및 예외 처리 / 정리와 관련이없는 많은 코드가있는 try-catch-finally 블록을 주목하고 있습니다. 그리고 예외 및 처리와 밀접하게 관련된 코드로 try-catch-finally 블록을 사용하는 것에 대한 편견을 인정할 것입니다. 여기 내가보고있는 몇 가지 예가 있습니다.
try 블록에는 던질 수있는 코드로 이어지는 많은 예비 호출 및 변수가 설정됩니다. 로깅 정보는 설정을 시도하고 try 블록에서도 실행됩니다.
마지막으로 블록은 형식 / 모듈 / 제어 형식 호출 (캐치 블록에 표시된대로 앱이 종료 되더라도)뿐만 아니라 패널과 같은 새 객체를 생성합니다.
대충:
methodName (...) { 시험 { // 메소드에 대한 많은 코드 ... // 던질 수있는 코드 ... // 메소드에 대한 더 많은 코드와 리턴 ... } 잡기 (뭔가) {// 예외 처리} 드디어 { // 예외로 인해 일부 정리가 완료되었습니다. // 생성 된 것들에 대한 더 많은 코드 (예외가 발생할 수 있음을 무시) // 더 많은 객체를 생성 } }
코드가 작동하므로 가치가 있습니다. 잘 캡슐화되지 않았으며 논리가 약간 복잡합니다. 나는 코드를 리팩토링 할뿐만 아니라 코드를 전환 할 때의 위험에 대해 (고통 적으로) 익숙하기 때문에 비슷한 질문으로 구성된 코드에 대한 다른 사람들의 경험을 알고 싶어합니다.
나쁜 스타일은 변경을 정당화합니까? 비슷한 상황에서 심하게 화상을 입은 사람이 있습니까? 그 나쁜 경험의 세부 사항을 공유하고 싶습니까? 내가 과잉 반응하고 스타일이 그렇게 나쁘지 않기 때문에 그대로 두십시오. 정리하는 것의 유지 보수 이점을 얻습니까?
finally
C #에서 무엇을하는지 알고 있습니다 ). C ++은 무엇입니까? 내가 생각하는 것은의 코드 catch
이며 C # 이후의 코드에도 동일하게 적용됩니다 finally
.
Environment.FailFast()
. 포착되지 않은 예외가 있으면 실행되지 않을 수 있습니다. 반복자 finally
를 사용하여 수동으로 반복 하는 경우 훨씬 더 복잡해집니다 .
finally
. 모든 올바른 사용은 RAII / RRID / SBRM (둘 중 원하는대로)에 적용됩니다.