API Basic SelectCase ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Select Case / Case / Exit Select

ClassicUO โ€ข Basic

Select Case๋Š” ์ €์žฅํ•œ ๊ฐ’์„ ํ›„๋ณด์™€ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•˜์—ฌ ํ•œ ๋ถ„๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์•„์ดํ…œ ๋ถ„๋ฅ˜, ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“œ, ์ˆซ์ž ๋ฒ”์œ„์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. UO. ์—†์ด ์“ฐ๋Š” Basic ๊ตฌ๋ฌธ์ด๋ฉฐ ์‹ ์•ˆ์˜ ๊ฒŒ์ž„ API ํ˜ธ์ถœ์—๋Š” UO.๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๊ตฌ๋ฌธ

Select Case expression
    Case value1, value2
        statements
        Exit Select
    Case from To to
        statements
    Case Is >= value
        statements
    Case Else
        statements
End Select

๋งค๊ฐœ๋ณ€์ˆ˜

  • expression โ€” ํ•„์ˆ˜ ์‹์œผ๋กœ ๋ณ€์ˆ˜, ๋ฆฌํ„ฐ๋Ÿด ๋˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์”๋‹ˆ๋‹ค. ๋นˆ ๋ธ”๋ก์ด๋‚˜ Case Else๋งŒ ์žˆ๋Š” ๋ธ”๋ก๋„ ์ง„์ž…ํ•  ๋•Œ๋งˆ๋‹ค ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • value / from / to โ€” Case์—๋Š” ๊ฐ’ ํ•˜๋‚˜ ๋˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ํ›„๋ณด ์‹์„ ์”๋‹ˆ๋‹ค. from To to๋Š” ์–‘ ๋์„ ํฌํ•จํ•˜๋ฉฐ ๋’ค์ง‘ํžŒ ๋ฒ”์œ„๋Š” ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜ํ•œ ๋น„๊ต๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ์ƒํ•œ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ธ์ˆ˜ ์•ˆ์˜ ์‰ผํ‘œ๋Š” ํ›„๋ณด๋ฅผ ๋‚˜๋ˆ„์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Is comparison value โ€” =, <>, <, <=, >, >=๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. Is๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜์—ฌ Case Is >= 5์™€ Case >= 5๊ฐ€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—”์ง„์˜ ๊ฐ’ ๋น„๊ต์ด๋ฉฐ ๊ฐ์ฒด ํ˜•์‹ ๊ฒ€์‚ฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • Case Else โ€” ์•ž์„  Case๊ฐ€ ๋ชจ๋‘ ์‹คํŒจํ•  ๋•Œ ์“ฐ๋Š” ์„ ํƒ์  ๊ธฐ๋ณธ ๋ถ„๊ธฐ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋งŒ ๋งˆ์ง€๋ง‰์— ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ๋ถˆ์ผ์น˜ ์‹œ End Select ๋‹ค์Œ์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Exit Select โ€” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐ”๊นฅ Select Case์—์„œ ๋‚˜์™€ ํ•ด๋‹น End Select ๋‹ค์Œ์œผ๋กœ ๊ฐ‘๋‹ˆ๋‹ค. ๋ฐ”๊นฅ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Select Case ๋ฐ–์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๋“œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

Select Case, Case, End Select, Exit Select๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ TRUE๋‚˜ 1๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ํ•จ์ˆ˜๋Š” Return์œผ๋กœ String ๋˜๋Š” Integer๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. TRUE๋Š” ์ˆซ์ž 1, FALSE๋Š” 0์ด๋ฏ€๋กœ Case True๋Š” 1๊ณผ ์ผ์น˜ํ•˜๋ฉฐ ๋ชจ๋“  0์ด ์•„๋‹Œ ์ˆ˜์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ์ค€๋น„ ๋‹จ๊ณ„์—์„œ SelectInstruction, ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” CaseInstruction ๊ฒ€์‚ฌ์™€ ํ™•์ •๋œ ์ ํ”„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์„ ํƒ ๊ฐ’์€ ํ˜„์žฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ์—๋งŒ ์ €์žฅ๋˜์–ด ๊ฐ€์งœ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌ๊ท€์™€ ์ค‘์ฒฉ ๋ธ”๋ก์€ ๋…๋ฆฝ์ ์ธ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ์žฌ์ง„์ž… ๋•Œ ์ด์ „ ๊ฐ’์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • CaseMatches๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฒซ ์ผ์น˜์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๋ณธ๋ฌธ์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•œ ํ›„ ๋‚˜๋จธ์ง€ ๋ถ„๊ธฐ๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. Case ์•ˆ์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊พธ์–ด๋„ ์„ ํƒ ๊ฐ’์„ ๋‹ค์‹œ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ฐœ์ƒํ•œ ๋ถ€์ˆ˜ ํšจ๊ณผ๋Š” ๋˜๋Œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ˆซ์ž์™€ ๋ฌธ์ž์—ด์€ ์ผ๋ฐ˜ ์—”์ง„ ๋น„๊ต ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉฐ ๋ฌธ์ž์—ด์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Option Compare Text ๋ฐ VB.NET ์ž๋™ ํ˜• ๋ณ€ํ™˜์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ˆซ์ž์™€ ํ…์ŠคํŠธ๋ฅผ ๋น„๊ตํ•  ๋•Œ ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์„ธ์š”.
  • End Select๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฒซ Case ์•ž์— ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ๋‘๊ฑฐ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ„๊ธฐ์— For/Next๋ฅผ ๋‚˜๋ˆ„๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๊ตฌ์กฐ๋Š” ๋กœ๋“œ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค. GoTo๋กœ ์ค‘๊ฐ„์— ๋“ค์–ด๊ฐ€์ง€ ๋ง๊ณ  Select Case๋กœ ์ง„์ž…ํ•˜์„ธ์š”.
  • ์˜ค๋ฅ˜๋Š” ํ˜„์žฌ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์„ ํƒ ์‹์ด ์‹คํŒจํ•˜๋ฉด On Error Resume Next๋Š” ์ „์ฒด ๋ธ”๋ก์„ ๊ฑด๋„ˆ๋›ฐ๊ณ , Case๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‹ค์Œ Case๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. Resume๋Š” ์‹คํŒจํ•œ ๋ช…๋ น์„ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. Exit Select๋Š” ๋– ๋‚˜๋Š” ํ™œ์„ฑ Finally๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น ์‚ฌ์ด์˜ ์ผ์‹œ ์ •์ง€์™€ ์ค‘์ง€ ๊ฒ€์‚ฌ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋Œ€๊ธฐ๋‚˜ ์‹œ๊ฐ„ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

1. ์ˆ˜๋Ÿ‰ ๋ถ„๋ฅ˜

# DescribeAmount๋Š” amount๋ฅผ ByVal๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. Case 0์€ empty, ์–‘ ๋์„ ํฌํ•จํ•˜๋Š” 1 To 4๋Š” small, Is >= 5๋Š” large๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜๋Š” Case Else๋กœ ๊ฐ‘๋‹ˆ๋‹ค. Main์€ -1, 0, 4, 5๋กœ ํ˜ธ์ถœํ•˜์—ฌ negative:empty:small:large๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ •ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
Option Explicit On
Function DescribeAmount(ByVal amount)
    Select Case amount
        Case 0
            Return "empty"
        Case 1 To 4
            Return "small"
        Case Is >= 5
            Return "large"
        Case Else
            Return "negative"
    End Select
End Function

Sub Main()
    Return DescribeAmount(-1) & ":" & DescribeAmount(0) & ":" & DescribeAmount(4) & ":" & DescribeAmount(5)
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

DescribeAmount๋Š” amount๋ฅผ ByVal๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. Case 0์€ empty, ์–‘ ๋์„ ํฌํ•จํ•˜๋Š” 1 To 4๋Š” small, Is >= 5๋Š” large๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜๋Š” Case Else๋กœ ๊ฐ‘๋‹ˆ๋‹ค. Main์€ -1, 0, 4, 5๋กœ ํ˜ธ์ถœํ•˜์—ฌ negative:empty:small:large๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ •ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

2. ํ˜ธ์ถœ ๊ด€์ฐฐ

# ReadMode๋Š” ByRef๋กœ reads๋ฅผ ๋Š˜๋ฆฌ๊ณ  ํ•œ ๋ฒˆ๋งŒ 2๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Candidate๋Š” checks๋ฅผ ๋Š˜๋ฆฌ๊ณ  value๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ›„๋ณด 1์€ ์‹คํŒจํ•˜๊ณ  2๋Š” ์ผ์น˜ํ•˜๋ฏ€๋กœ 3์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. selected๋Š” 7์ด๊ณ  Main์€ ๊ฒŒ์ž„ ์ ‘๊ทผ ์—†์ด 1*100+2*10+7=127์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Function ReadMode(ByRef reads)
    reads += 1
    Return 2
End Function

Function Candidate(ByRef checks, ByVal value)
    checks += 1
    Return value
End Function

Sub Main()
    Dim reads = 0
    Dim checks = 0
    Dim selected = 0
    Select Case ReadMode(reads)
        Case Candidate(checks, 1)
            selected = -1
        Case Candidate(checks, 2), Candidate(checks, 3)
            selected = 7
        Case Else
            selected = -9
    End Select
    Return reads * 100 + checks * 10 + selected
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

ReadMode๋Š” ByRef๋กœ reads๋ฅผ ๋Š˜๋ฆฌ๊ณ  ํ•œ ๋ฒˆ๋งŒ 2๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Candidate๋Š” checks๋ฅผ ๋Š˜๋ฆฌ๊ณ  value๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ›„๋ณด 1์€ ์‹คํŒจํ•˜๊ณ  2๋Š” ์ผ์น˜ํ•˜๋ฏ€๋กœ 3์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. selected๋Š” 7์ด๊ณ  Main์€ ๊ฒŒ์ž„ ์ ‘๊ทผ ์—†์ด 1100+210+7=127์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3. ์ค‘์ฒฉ ์„ ํƒ ํƒˆ์ถœ

# route๊ฐ€ harvest์ด๋ฏ€๋กœ ์ฒซ ํ›„๋ณด์™€ ์ผ์น˜ํ•˜์—ฌ trace=1์ด ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ Case 2์—์„œ Exit Select๋ฅผ ์‹คํ–‰ํ•˜๊ณ  trace=99๋Š” ๊ฑด๋„ˆ๋›ฐ์ง€๋งŒ Finally๋Š” ์ˆซ์ž 2๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. ๋ฐ”๊นฅ ๋ถ„๊ธฐ์—์„œ 3์„ ๋ถ™์—ฌ 123์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๊นฅ Case Else๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. route๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Sub Main()
    Dim route = "harvest"
    Dim trace = 0
    Select Case route
        Case "harvest", "loot"
            trace = 1
            Select Case 2
                Case 2
                    Try
                        Exit Select
                        trace = 99
                    Finally
                        trace = trace * 10 + 2
                    End Try
            End Select
            trace = trace * 10 + 3
        Case Else
            trace = -1
    End Select
    Return trace
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

route๊ฐ€ harvest์ด๋ฏ€๋กœ ์ฒซ ํ›„๋ณด์™€ ์ผ์น˜ํ•˜์—ฌ trace=1์ด ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ Case 2์—์„œ Exit Select๋ฅผ ์‹คํ–‰ํ•˜๊ณ  trace=99๋Š” ๊ฑด๋„ˆ๋›ฐ์ง€๋งŒ Finally๋Š” ์ˆซ์ž 2๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. ๋ฐ”๊นฅ ๋ถ„๊ธฐ์—์„œ 3์„ ๋ถ™์—ฌ 123์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๊นฅ Case Else๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. route๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


en ยท ru ยท uk ยท fr ยท de ยท it ยท es ยท zh-tw ยท ja ยท ko

Basic

โš ๏ธ **GitHub.com Fallback** โš ๏ธ