15장 - 조건문 사용
Edited by / 임수형 (sulogc)
조건문은 다른 명령문의 실행을 제어하는 명령문이다. 명령문이 분기
된다.
15-1 if 문
if-then 명령문
다음 가이드라인을 따른다.
- 일반적인 경우를 처리하는 코드를 먼저 작성한 다음 특별한 경우를 처리하라.
- 동치에 대해서 정확하게 이동 경로를 결정하다.
- 정상적인 경우를 else가 아니라 if 문 다음에 입력하라
- if 문 다음에 의미 있는 명령문을 작성하라
- else 절을 고려하라 else절이 필요하지 않는 경우, 주석을 통해 설명한다.
- 정확성 파악을 위해 else 문을 테스트하라.
- if와 else문의 반대 결과를 검사하라.
연속적인 if-then-else 문
case문을 지원하지 않는 경우 if-then-else 테스트를 연속해서 작성하게 된다. 다음과 같은 가이드라인을 고려한다.
- 복잡한 테스트를 불린 함수 호출로 단순화하라.
if ( inputCharacter < SPACE ) { characterType = CharacterType_ControlCharacter; } else if ( inputCharacter == ' ' || inputCharacter == ',' || inputCharacter == '.' || inputCharacter == '!' || inputCharacter == '(' || inputCharacter == ')' || inputCharacter == ':' || inputCharacter == ';' || inputCharacter == '?' || inputCharacter == '-' ) { characterType = CharacterType_Punctuation; } else if ( '0' <= inputCharacter && inputCharacter <= '9' ) { characterType = CharacterType_Digit; } else if ( ( 'a' <= inputCharacter && inputCharacter <= 'z' ) || ( 'A' <= inputCharacter && inputCharacter <= 'Z' ) ) { characterType = CharacterType_Letter; }
if ( IsControl( inputCharacter ) ) {
characterType = CharacterType_ControlCharacter;
}
else if ( IsPunctuation( inputCharacter ) ) {
characterType = CharacterType_Punctuation;
}
else if ( IsDigit( inputCharacter ) ) {
characterType = CharacterType_Digit;
}
else if ( IsLetter( inputCharacter ) ) {
characterType = CharacterType_Letter;
}
- 가장 흔한 경우를 앞에 놓아라.
- 모든 경우를 다루었는지 확인하라.
15-2 case 문
case나 switch문은 언어에 따라 매우 다르게 구현된다. 다음 가이드라인을 따른다.
가장 효과적인 case 순서의 선택
선택 사항이 적은 경우 순서가 중요하지 않지만, 이벤트 기반 프로그램에서 수십 개의 이벤트를 처리하는 긴 case 문이 있다면 그 경우에는 순서가 중요하다.
- 알파벳 순이나 숫자 순으로 case를 나열하라
- 가장 정상적인 경우를 앞에 놓아라 (정상/비정상)
- 빈도에 따라서 case를 나열하라 (흔한 경우 파악 용이)
case 문 사용 팁
- case 문이 하는 일을 간단하게 유지한다. 각 case 다음에 오는 코드가 짧으면 case 문의 구조를 명확하게 하는 데 도움을 준다.
- case 문에서 사용하기 위해서 가짜 변수를 만들지 않는다.
- 유효한 기본값을 찾고자 하는 경우에만 default 문을 사용한다.
- 오류를 검출하기 위해서 default 절을 사용한다.