E D R , A S I H C RSS

Switch And Case As Bad Smell

가위바위보 구현 코드들� 보면 케�스 문� 많� 쓰거나 혹� 비슷한 구조� if 문� 중복� 경우가 많습니다.

케�스문� 줄줄� 나오는 것�나 비슷한 구조가 반복�는 것�나 모� "나� 냄새"(Moa:BadSmell )입니다. 조금��� 나� 냄새가 나면 바로바로 냄새 제거를 해야 합니다. 예컨대, 반복�는 케�스문� 테�블 프로그래�(Table/Data Driven Programming)으로 해결할 수 있습니다.

그리고, 사고� �구들� �극�으로 활용하기 바�니다. 스테�트 다�어그램�나, 심지어는 x,y 좌표계를 사용하는 것, 혹� 서브루틴� 통해 문제를 소문제(subproblem)로 나누는 것� 아주 훌륭한 사고� �구가 �니다 -- 문제� 복잡�를 낮춰주기 때문�죠.

예컨대, 다�과 같� 소문제가 있겠죠:
  • í…�스트화ì�¼ë¡œë¶€í„° ìž…ë ¥ìž�료 ì�½ê³  í•´ì„�하기
  • 둘 중ì—� 누가 ì�´ê²¼ëŠ”ì§€ íŒ�단하기
  • 사람별로 ì�´ê¸´ 횟수, ì§„ 횟수 누ì �하기
  • ê²°ê³¼ 보여주기

�중�서 �번째 "�단하기"를 TDD와 리팩토�� 통해 다�과 같� 만들었습니다.

~cpp 
GAWI=1
BAWI=2
BO=3

def getWinner(p1,p2):
    """return 1 when p1 wins, 2 when p2 wins, 0 when a tie"""
    if p1>=p2:
        return p1-p2
    else:
        return p1-p2+3

여기서 한단계 � 리팩토�� 가능할까요?

def getWinner(p1,p2):
    """return 1 when p1 wins, 2 when p2 wins, 0 when a tie"""
    return (p1+2*p2)%3

>>> getWinner(GAWI,BO)
1
>>> getWinner(BO,GAWI)
2
>>> getWinner(BAWI,GAWI)
1
>>> getWinner(BO,BO)
0


사실� �런 종� �태로서� 프로그램� 중요한 것� 아니고, 어떻게 �런 프로그램� �달할 수 있었는지, 그 사고와 프로그래�� 과정� 중요합니다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:09
Processing time 0.0051 sec