다음: 사전 참 조건 반복문, 이전: 홑분기문, 상위 문서: 명령문   [차례][찾아보기]


10.2 겹분기문

변수 하나의 값에 기반하여 여러 행동을 취할 일은 매우 흔합니다. if문으로도 아래처럼 구현할 수 있습니다.

if (X == 1)
  do_something ();
elseif (X == 2)
  do_something_else ();
else
  do_something_completely_different ();
endif

이런 종류의 부호는 만들고 보수하기에 번거롭습니다. 이 문제를 해결하기 위하여 옥타브에는 switch문이 있습니다. switch문을 사용하면, 위 예시를 아래처럼 만들 수 있습니다.

switch (X)
  case 1
    do_something ();
  case 2
    do_something_else ();
  otherwise
    do_something_completely_different ();
endswitch

이 부호로 반복 구조를 더욱 명확하게 하고, 부호를 읽기 좋게 하고, 보수하기 쉽게 합니다. 또한, 변수 X가 이름을 바꾸어도 조건식마다 이름을 바꾸어야 하는 if문에 비해 한 줄만 이름을 바꾸면 됩니다.

switch문의 일반적인 형식입니다.

switch (표현식)
  case 보람
    명령_목록
  case 보람
    명령_목록
  …

  otherwise
    명령_목록
endswitch

보람에는 아무 표현식이나 가능합니다. 그러나 보람을 겹쳐도 효과가 없으며, 처음으로 일치한 보람의 명령_목록만 실행합니다. switch문이 의미가 있으려면, 적어도 case 보람 명령_목록 항목이 한 개 있어야 하며, otherwise 명령_목록은 선택 사항입니다.

보람이 낱칸 배열이고, 낱칸 배열의 아무 원소나 표현식에 맞기만 한다면, 딸린 명령_목록을 실행합니다. 예를 들어, 아래 풀그림은 ‘Variable is either 6 or 7’을 출력합니다.

A = 7;
switch (A)
  case { 6, 7 }
    printf ("variable is either 6 or 7\n");
  otherwise
    printf ("variable is neither 6 nor 7\n");
endswitch

다른 모든 전용 end 예약어처럼, endswitchend로 대신할 수 있지만, 전용 예약을 사용하여야 더 명확한 구분이 가능합니다.

if문과 비교하여 switch문 사용의 한 이점은 보람에 문자열을 넣을 수 있다는 것입니다. if문은 조건식에 문자열을 넣지 하는 반면

if (X == "a string") # 올바르지 않음

X와 문자열간의 문자 단위 비교 덕분에 문자열로도 비교할 수 있습니다. switch문의 특별한 경우이며 아래처럼 풀그림을 짜도 됩니다.

switch (X)
  case "a string"
    do_something
  …
endswitch

다음: 사전 참 조건 반복문, 이전: 홑분기문, 상위 문서: 명령문   [차례][찾아보기]