이를테면
bool CanMoveTo(int x, int y) // x, y위치로 갈 수 있는가
{
if(IsStun()) // 스턴걸린 상태라면
return false;
if(IsObstacle(x, y) // x, y위치에 장애물이 있다면
return false;
if(IsThereEnemy(x, y) // x, y위치에 적이 있다면
return false;
return true;
}
void TryMoveTo(int x, y)
{
if(CanMoveTo(x, y))
Enter(x, y);
else
EnterFail(); // 로그
}
와 같이 말입니다. x, y 위치로 갈 수 있는지 없는지 파악해서 true/false를 리턴하는 함수입니다.
그런데 테스트해보니, 분명히 갈 수 있는 위치이며 갈 수 있는 상태인데 false를 리턴한다면 어떨까요?
만약 다른 테스터의 테스트중이나 외부에서 디버그로그를 받아야 하는 상황이라서 디버거를 사용 못한다면 저 세 함수를 다 분석해서 버그가 어디 있는지 찾아야 합니다.
이럴 때는 bool보다 enum을 사용하는 것이 낫습니다.
즉 reason값을 확인하면 저 세 함수들 중 어느 부분에 버그가 있는지 확인할 수 있으므로 좀더 쉬운 디버깅이 가능합니다.
그런데 테스트해보니, 분명히 갈 수 있는 위치이며 갈 수 있는 상태인데 false를 리턴한다면 어떨까요?
만약 다른 테스터의 테스트중이나 외부에서 디버그로그를 받아야 하는 상황이라서 디버거를 사용 못한다면 저 세 함수를 다 분석해서 버그가 어디 있는지 찾아야 합니다.
이럴 때는 bool보다 enum을 사용하는 것이 낫습니다.
enum WhyCannotMoveTo
{
NoReason, // 이유없음 - 들어갈 수 있음
Stun,
Obstacle,
Enemy,
}
WhyCannotMoveTo CanMoveTo(int x, int y) // x, y위치로 갈 수 있는가
{
if(IsStun()) // 스턴걸린 상태라면
return Stun;
if(IsObstacle(x, y) // x, y위치에 장애물이 있다면
return Obstacle;
if(IsThereEnemy(x, y) // x, y위치에 적이 있다면
return Enemy;
return NoReason;
}
void TryMoveTo(int x, y)
{
WhyCannotMoveTo reason = CanMoveTo(x, y);
if(reason == NoReason)
Enter(x, y);
else
EnterFail(reason); // 로그
}
즉 reason값을 확인하면 저 세 함수들 중 어느 부분에 버그가 있는지 확인할 수 있으므로 좀더 쉬운 디버깅이 가능합니다.
댓글 없음:
댓글 쓰기