2012-01-26 4 views

답변

2

실패시 false를 반환하고 성공시 true를 반환하도록 함수를 만듭니다.)

if (course.isFull()) { 
    try { 
     attemptStudentCapacityIncrease(course); 
    } catch (Exception ex) { 
     // could not increase course student capacity 
     return; 
    } 
} 

을하지만, 예외적 인 상황에 대한 예외를 사용하는 기억 :

if (course.isFull()) { 
    if (!attemptStudentCapacityIncrease(course)) { 
     // could not increase course student capacity 
     return; 
    } 
} 

당신은 또한 다음과 같이 처리하는, 실패시 예외를 던질 기능을 수정하는 것이 좋습니다.

+0

의 연습에서 호출 (그리고 당신이 생각하는 더 나은 모양) 얼마나 자주 이 방법을 사용하려면 doIncreaseStudentCapacity 메서드 이름을 변경해야 할 수도 있습니다 ... – Andrew

+0

나는 그것을 권하고 싶습니다. 좋은 이름은 imho 프로그래밍에서 가장 중요한 것입니다. 함수 이름에서 "시도"를하는 것은 보통 중복되는 일입니다. 그리고 단지 increaseStudentCapacity가 조금 더 깔끔합니다 :). – clime

+0

나는 부울 값을 반환하는 메서드에 대해 "do"와 같은 단어를 사용한다는 생각을 좋아한다. 왜냐하면 그 메서드의 결과가 해당 연산이 발생했는지 여부와는 무관하기 때문이다. 만약 increaseStudentCapacity를 사용했다면, 함수가 "잘 작동해야한다"는 것처럼 보이고, 그렇지 않다면 예외가 될 것입니다. – Andrew

0

아니면 API의 변경 수없는 경우 :

int attempts = 3; 
while (attempts-- && course.isFull()) 
    attemptStudentCapacityIncrease(course); 

if (attempts == 0) 
    return; 
0

또한 사용자 정의 예외를 던질 수있다.

if (course.isFull()) { 
    try { 
     attemptStudentCapacityIncrease(course); 
    } catch (IncreaseCourseException ice) { 
     return; 
    } 
} 

나는 그것이 attemptStudentCapacityIncrease에서 부울 vlaue을 반환하는 것보다 더 좋은 것을 생각하지만, 덜 효율적이다, 그래서에 의존하는 방법은

+0

그래, 내가 그랬던 것처럼 메소드 이름을 가진 부울을 좋아하지 않았다. 어떻게 doIncreaseStudentCapacity 메소드의 이름을 바꾼다 고 생각하니? – Andrew

관련 문제