|
Select Case 구문은 If Else 구문을 특정 상황에서 간략하게 표현하기 위한 것입니다.
다음 예를 비교해 보시면
"이런 상황에서는 Select Case 구문이 아주 편리하겠구나!"
하고 느끼실 것입니다.
char = Mid(MyString, c, 1)
If char >= "가" And char <= "힣" Then
한글코드_처리
ElseIf (char >= "一" And char <= "龜") Or (char >= "豈" And char <= "廓") Then
한자글코드_처리
ElseIf char = "+" Then
덧셈_처리
ElseIf char = "*" Or LCase(char) = "x" Then
곱셈_처리
ElseIf IsNumeric(char) Then
수치_처리
ElseIf char <= " " Then
제어코드_처리
Else
예외처리
End If
다음은 이와 똑같은 기능을 수행하는 Select Case 조건 블록입니다.
Select Case Mid(MyString, c, 1)
Case "가" To "힣"
한글코드_처리
Case "一" To "龜", "豈" To "廓"
한자글코드_처리
Case "+"
덧셈_처리
Case "*", "x", "X"
곱셈_처리
Case "0" To "9"
수치_처리
Case Is <= " "
제어코드_처리
Else
예외처리
Case Else
End Select
차이가 확실히 느껴지지요?
다만 Case 이후의 조건식에서는 판정 대상이 되는 변수에
IsNumeric이나 LCase와 같은 함수를 덧씌우지는 못합니다.
한편, 어떤 상황(조건이 규칙적이거나 배열요소 등을 활용할 경우)에서는
If 구문에 반복문을 결합하여 사용하는 것이
여러 Case를 반복적으로 나열하는 것보다 효율적일 때가 있습니다.
다음 예를 보시죠
season = Array("봄", "여름", "가을", "겨울")
mount = Array("금강산", "봉래산", "풍악산", "계골산")
For s = 0 To 3
If mystr = mount(s) Then Exit For
Next s
If s < 4 Then
MsgBox season(s) & "에는 " & mount(s), , "철따라 새 옷 갈아입는 금강산"
Else
MsgBox "그런 계절도 있나요?", , "입력 오류"
End If
첫 번째의 조건 검색 구문은 반복문과 If 구문을 결합하여 간소화했고
두 번째의 조건 분지 명령도 하나의 조건에 대해 참인가 거짓인가만 분지되므로 If 구문이 더 편리할 것입니다.
그런데, 이것을 다음과 같이 하면 문법 오류가 됩니다.
season = Array("봄", "여름", "가을", "겨울")
mount = Array("금강산", "봉래산", "풍악산", "계골산")
Select Case m
For s = 0 To 3
Case mount(s)
MsgBox season(s) & "에는 " & mount(s), , "철따라 새 옷 갈아입는 금강산"
Next m
Case Else
MsgBox "그런 계절도 있나요?", , "입력 오류"
End Select
얼핏 생각하면 반복적인 Case 블록의 나열을 For 루프로 간편화 하려는 의도인데
이건 반칙입니다. 왜냐하면 For/Next 블록과 Case/Case 블록이 서로 교차하기 때문이지요.
다음의 경우처럼 각 명령 블록들 사이에 완전한 포함관계가 되면 괜찮지만
두 개의 서로 다른 블록이 일부만 교차하여 교집합을 형성하고 있으면 안됩니다.
Select Case m
Case ...
For ...
....
Next ..
Case ...
...
Case Else
Do
...
Loop
End Select
For ...
Select Case m
Case ...
....
Case Else
Do
...
Loop
End Select
Next ..
|
|