2013-01-17 3 views
-3

귀하의 의견으로는 예외 처리를 위해 더 좋은 방법은 if 문 또는 Try/Catch 블록입니까?예외 처리, 명령문 또는 Try/Catch 블록?

아시다시피 모든 예외는 if 문으로 처리 할 수 ​​있습니다.

+0

그건 실수 였어, 편집 된 – Sajad

+0

아마 @APoliteBoy는 무엇을 의미 했는가? 모든 예외는'If' 문을 사용하여 처리 될 수 있습니까? – TheWhiteRabbit

+0

'try catch '문과'if' 문이 처리하는 동일한 예외에 대한 예제를 제공해 주시겠습니까? –

답변

1

상황에 따라 다릅니다. 나는 설명하려고 노력할 것이다.

try { 
    myVar.myFunc(); 
} 
catch(NullPointerException e) { 
    //bla bla 
} 

또는

if (myVar != null) 
    myVar.myFunc(); 

myVar는 코드 흐름의 한 부분으로 null을 할 수있는 경우, 다음 if 문을 사용할 수 있습니다, 그렇지 않으면 당신은을 사용해야합니다

이 간단한 예를 살펴 예외로 인해 발생했을 가능성이 높습니다.

+0

정말 유용했습니다. 고마워요! – Sajad

0

글쎄, 당신이 이해하는 것은 함수의 반환 값이 SUCCESS 또는 FAILURE가 될 것이라는 if/else 문을 의미하며 실제 모든 작업은 함수의 인수에서 수행됩니다.

이것은 예외가없는 C 스타일의 코딩입니다.
자바에서는 참조 (또는 포인터)로 요소를 전달할 수 없으므로이 방법은 문제가 있습니다 (매우 우아하지 않은 int을 반환하는 메서드에 대한 래퍼를 만들어야 함). 불필요한 것들을 우아하게합니다.

int calcSomething(int arg1, int arg2, int* result) { 
    //calcualtions 
    if (...) return FAILURE; 
    *result = ... 
    return SUCCESS; 
} 

을 그리고 코딩 환경은 다음과 같습니다 : -

예는 C 스타일의 코드는 할 수

if (calcSomething(...) == FAILURE) { handleError(); } 

주 - 접근 방식은 예를 들어, 자바에서 완전히 diasppear하지 않았다 Collection#add() A가 반환 boolean은 작업이 성공했는지 여부를 나타냅니다. false 값이 실제 오류가 아닌 작업에 주로 사용됩니다. 더 이상 수행 할 필요가 없음을 나타냅니다.

"오류"가 차단 될 때마다 (오류 처리를 위해 예외를 사용함) 훨씬 더 읽기 쉽고 코드 유지 관리가 용이합니다. 그것은 단지 표시 일뿐입니다 (eaxmple - 요소가 이미 세트에 있음) - 반환 값의 부울은 정상적으로 처리 될 수 있습니다.

+0

정말 유용했습니다, 고마워요! – Sajad