API Basic SelectCase ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
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๋ฅผ ์คํํฉ๋๋ค. ๋ช ๋ น ์ฌ์ด์ ์ผ์ ์ ์ง์ ์ค์ง ๊ฒ์ฌ๋ฅผ ์ ์งํ๋ฉฐ ๋๊ธฐ๋ ์๊ฐ ์ ํ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
# 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๋ฅผ ๋ง๋ญ๋๋ค. ๋ฌธ์์ด์ ์คํฌ๋ฆฝํธ๊ฐ ์ ํ ๊ฒฐ๊ณผ์ ๋๋ค.
# 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์ ๋ฐํํฉ๋๋ค.
# 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์ ๋ฐํํฉ๋๋ค.