2010-11-23 3 views
0

제출 전 검토가 끝나면이 질문은 믿기지 않을 정도로 어리 석다는 것을 알고 있습니다.조건부 검사 및 변수없이 반환, 메서드를 두 번 호출 : 가능합니까?

if (this.gameOver(gpos) > 0) { 
    //do stuff 
    return this.gameOver(gpos); 
} 

내가 첫 번째 예는 처음에 두 번 또는 한 번만 this.gameOver(gpos);를 호출 할 것인지 여부에 의문이었다

if (this.gameOver()) { 
    //do stuff 
    return this.gameOver(gpos); 
} 

비교. 분명히, 그것은 두 번 (오른쪽?) 호출하지만 중간 변수가없는 상태에서 조건을 확인하고 동시에 return 문에 있어야하는 방법이 있습니까? 나는이 나쁜 디자인이라고 생각하지만

답변

0

나는 observer pattern이 여기에서 잘 작동한다고 믿습니다.

본질적으로 관찰 할 수있는 Game 클래스의 관찰자 인 관찰자 Console 클래스 (xbox 콘솔과 같음)가 있습니다. 게임이 완료되면, 그것은 Game 구타, 완료되면 Console 알리기 위해 이벤트를 발생 수, 일시 정지 등

사이에 이벤트를 게시하는 관찰자를 사용할 수있다 등 GWT, RCP, 같은

대부분의 GUI 프레임 워크 windows/views.

0

, 나는 당신이 원하는 것을 허용 믿는다 : 당신이 언급 한 바와 같이, 저장

boolean gameOver(GamePosition gp) { 
    // example 
    if (this.gameOver) 
    return true; 
    else 
    throw new Exception(); 
} 

void someMethod() { 
    try { 
    return gameOver(gp); 
    } catch (Exception e) { 
    // other logic for when the game is not over 
    } 
} 

지금, 더 나은 디자인은 단지 방법 isGameOver(gp)을하는 것, 그리고 지역 변수에.

1

첫 번째 구현에서는 this.gameOver(gpos)을 두 번 호출합니다. 나는 일시적으로 저장하지 않고 그 값을 조건부로 돌려주는 깨끗한 방법을 모른다. 여기에 임시 변수를 사용할 수없는 이유가 있습니까? 코드를 읽기 쉽게 (그리고 아마도 더 느리게) 만들 수있는 해킹 된 솔루션이 있습니다.

+1

임시 변수를 사용할 수없는 이유가 전혀 없습니다. 단지 궁금합니다. – sova

관련 문제