소스코드리뷰(VIII) 논리판단을 줄여라

[목차(도우미)]
예를 들어 메일의 아이콘을 바꾸는 경우
P=답장을 보냄 TRUE/FALSE
Q=전달을 보냄 TRUE/FALSE
R=아이콘의 종류 [0..3]

P(답장)
Q(전달)
R(아이콘)
T
T
3
T
F
2
F
T
1
F
F
0

이러한 결과를 가지는 소스코드는 어떻게 될까?

예1) 중첩된 if를 사용

  1. if P then
  2.   if Q then
  3.     R:=3
  4.   else
  5.     R:=2
  6. else begin
  7.   if Q then
  8.     R:=1
  9.   else
  10.     R:=0
  11. end;

예2) 복잡하지만 else if를 사용

  1. if P And Q then
  2.   R:=3
  3. else if P And Not Q then
  4.   R:=2
  5. else if Not And Q then
  6.   R:=1
  7. else if Not And Not Q then begin
  8.   R:=0
  9. end;

예3) 약간의 트릭을 사용

  1. R:= Ord(P) shl 1 + Ord(Q);

파스칼(델파이)을 알아야 이해된다.
Ord는 열거형의 순서를 나타내고 shl은 왼쪽 시프트연산.
Ord(True) = 1, Ord(False)=0
1 shl 1 = 이진수 10 =2

(돌산: 이 사진만 보면 산 정상의 사진으로 보이지만, 실은 모 대학 교정내의 조경물이다)

논리적인 판단을 줄여보자

어떤 소스가 알기 쉬운지는 각자의 판단에 맡긴다. 중요한 것은 논리적 판단(if 문)이 필요하지 않은 부분을 논리적으로 처리하고자 하는 습관이 필요이상의 복잡한 소스코드를 낳는다는 점이다. 복잡한 소스코드는 알아보기도 어렵고 유지보수도 어렵게 된다. 무엇보다도 프로그래밍의 품질저하와 실행속도를 떨어뜨린다.

본질적으로 if, select(case) 판단이 필요하지 않은 부분에 판단문을 넣지 말고 줄여보는 관점으로 보자.

관련된 내 블로그:

[연구와 개발] - 소스코드리뷰(II) 논리연산을 간결히 하라

by 금메달.아빠 on 2010. 5. 23. 19:04