API Basic Goto ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
GoTo / label:
ClassicUO โข Basic
GoTo๋ ํ์ฌ ํ๋ก์์ ๋๋ ํจ์์ ์ด๋ฆ ์๋ ๋ ์ด๋ธ๋ก ์คํ์ ์ฎ๊น๋๋ค. ๋ ์ด๋ธ์ ์ฝ๋ ์์น์ด๋ฉฐ ํธ์ถ ๊ฐ๋ฅํ ํ๋ก์์ ๊ฐ ์๋๋๋ค. ์ผ๋ฐ ์ ์ด์๋ If, ๋ฐ๋ณต๋ฌธ, Return์ ์ฌ์ฉํ์ธ์.
์ ํํ ๊ตฌ๋ฌธ
GoTo label
label:
๋งค๊ฐ๋ณ์
labelโ ๊ฐ์ ํ๋ก์์ ์์์ label:์ ๋ณ๋ ์ค์ ์ ์ธํ ์๋ณ์์ ๋๋ค. ์ด๋์ ๋ฐ์ดํ, ๊ดํธ, ๋์ ๋ค ์ฝ๋ก ์์ด GoTo label๋ก ์๋๋ค. ์๋ค ์ด๋์ ์ง์ํ๋ฉฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์์ ์์๋ ์ด๋ฆ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฆ์ ์ ์ ์ธ ์ ์์ง๋ง ๋ชจ๋ ๋ฉค๋ฒ๋ผ๋ ๋ป์ ์๋๋๋ค. ์ซ์, ๊ณ์ฐ์, ๋ค๋ฅธ ํ๋ก์์ ์ ๋ ์ด๋ธ์ ์ง์๋๋ ๋์์ด ์๋๋๋ค.
๋ฐํ๊ฐ
GoTo์ label:์ ๊ฐ์ ๋ฐํํ์ง ์์ผ๋ฉฐ 1/0 ๋๋ TRUE/FALSE๋ก ์ฑ๊ณต์ ๋ํ๋ด์ง ์์ต๋๋ค. ์์ ์ Main์ ์ง์ ๊ณ์ฐํ Integer -1, 6, 123์ ๋ช ์์ ์ผ๋ก Returnํฉ๋๋ค.
๋์
- ์ค๋น ๋จ๊ณ์์ ๋ ์ด๋ธ ์ฃผ์๋ฅผ ๊ธฐ๋กํ๊ณ ํ๋ก์์ ์ ์ฒด๋ฅผ ์ฝ์ ๋ค ์ด๋ ๋์์ ์ฐ๊ฒฐํฉ๋๋ค. ์คํ์ ํ์ ๋ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์์ค๋ฅผ ๋ค์ ๊ฒ์ํ์ง ์์ต๋๋ค. ๋ณ์ ๊ฐ์ ์ ์ง๋๊ณ ์ด์ ๋์์ ์ทจ์๋์ง ์์ต๋๋ค.
- ์ ์ ์๋ ๋์์ SC009์ด๋ฉฐ ํด๋ผ์ด์ธํธ๊ฐ ์คํ์ ๋ง์ต๋๋ค. ๊ฐ์ ํ๋ก์์ ์ ์ค๋ณต ์ด๋ฆ์ ๋์๋ฌธ์๊ฐ ๋ฌ๋ผ๋ ์ด๊ธฐํ ์ ์ SC021์ ๋ ๋๋ค. Include ์ง๋จ์ ์๋ณธ ํ์ผ๊ณผ ์ค์ ์ ์งํฉ๋๋ค. ๋ถํ์ํ ๋ฌธ์๋ ๊ฒฝ๊ณ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ์ ํํ ๊ตฌ๋ฌธ์ ์ฐ์ธ์.
- ํ์ฑ Try ๋ฐ์ผ๋ก ์ด๋ํ๋ฉด ์์ชฝ์์ ๋ฐ๊นฅ์ชฝ ์์๋ก Finally๋ฅผ ์คํํ ๋ค ๋์์ ๋์ฐฉํฉ๋๋ค. ๊ฐ์ ํ์ฑ Try ์์ ์ด๋์ ๊ทธ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. Finally ์ค๋ฅ๋ก ๋์์ ๋์ฐฉํ์ง ๋ชปํ ์๋ ์์ต๋๋ค.
- ๋ฐ๋ณต๋ฌธ๊ณผ Try/Catch/Finally๋ ์ ์ ์์๋ฌธ์ผ๋ก ๋ค์ด๊ฐ์ธ์. ์ค๊ฐ์ผ๋ก ์ด๋ํด๋ ๊ฑด๋๋ด ์ด๊ธฐํ๋ ์คํ ์ํ๋ฅผ ๋ณต์ํ์ง ์์ผ๋ฏ๋ก ์ฌ๊ฐ ๋ฐฉ๋ฒ์ผ๋ก ์ง์๋์ง ์์ต๋๋ค. ์ผ๋ฐ ๋ฐ๋ณต ์ ์ด์๋ Continue ๋๋ Exit๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ค๋ก ์ด๋ํ ๋ ์๋ ์๋ ํ์ ์ ํ, ์๊ฐ ์ ํ, ๋๊ธฐ๊ฐ ์์ต๋๋ค. ์ข ๋ฃ ์กฐ๊ฑด์ ๋ช ์์ ์ผ๋ก ๋ฐ๊พธ์ธ์. ์ผ๋ฐ ํ๋ฆ๋ ๋ ์ด๋ธ์ ์ง๋๊ฐ๋ฏ๋ก ๋ถํ์ํ ๊ตฌ๊ฐ์ ์ด๋์ด๋ Return์ผ๋ก ๊ฑด๋๋๋๋ค. ์ค๋ฅ ์ฒ๋ฆฌ๊ธฐ๋ On Error๋ก ์ค์ ํฉ๋๋ค.
์์
1. ์์ผ๋ก ๋ถ๊ธฐ
# amount=0์ NoItems๋ฅผ ์ ํํด result=-1๋ก ๋ง๋ ํ Finished์์ -1์ ๋ฐํํฉ๋๋ค. amount=4์ด๋ฉด ์ ์ ๊ฒฝ๋ก๊ฐ 40์ ๋์
ํ๊ณ GoTo Finished๊ฐ NoItems๋ฅผ ๊ฑด๋๋๋๋ค. ๋ ๋ ์ด๋ธ์ Main์ ์ํ๋ฉฐ ํจ์ ํธ์ถ์ด ์๋๋๋ค.
Option Explicit On
Sub Main()
Var amount = 0
Var result = 0
If amount <= 0 Then
GoTo NoItems
End If
result = amount * 10
GoTo Finished
NoItems:
result = -1
Finished:
Return result
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
amount=0์ NoItems๋ฅผ ์ ํํด result=-1๋ก ๋ง๋ ํ Finished์์ -1์ ๋ฐํํฉ๋๋ค. amount=4์ด๋ฉด ์ ์ ๊ฒฝ๋ก๊ฐ 40์ ๋์ ํ๊ณ GoTo Finished๊ฐ NoItems๋ฅผ ๊ฑด๋๋๋๋ค. ๋ ๋ ์ด๋ธ์ Main์ ์ํ๋ฉฐ ํจ์ ํธ์ถ์ด ์๋๋๋ค.
2. ํ์๊ฐ ์ ํ๋ ๋ฐ๋ณต
# attempt๋ 0์์ ์์ํ์ฌ ๊ฒ์ฌ ์ ์ ์ฆ๊ฐํฉ๋๋ค. Again๊ณผ again์ ๊ฐ์ ๋ ์ด๋ธ์
๋๋ค. ์ธ ๋ฒ์ ๊ฑธ์ณ 1, 2, 3์ ๋ํ ๋ค attempt<3์ด ๊ฑฐ์ง์ด ๋์ด 6์ ๋ฐํํฉ๋๋ค. total์ ๋ ์ด๋ธ ์์์ ์ด๊ธฐํํ๋ฏ๋ก ์ด๋ํ ๋ 0์ผ๋ก ๋๋์๊ฐ์ง ์์ต๋๋ค.
Option Explicit On
Sub Main()
Var attempt = 0
Var total = 0
Again:
attempt += 1
total += attempt
If attempt < 3 Then
GoTo again
End If
Return total
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
attempt๋ 0์์ ์์ํ์ฌ ๊ฒ์ฌ ์ ์ ์ฆ๊ฐํฉ๋๋ค. Again๊ณผ again์ ๊ฐ์ ๋ ์ด๋ธ์ ๋๋ค. ์ธ ๋ฒ์ ๊ฑธ์ณ 1, 2, 3์ ๋ํ ๋ค attempt<3์ด ๊ฑฐ์ง์ด ๋์ด 6์ ๋ฐํํฉ๋๋ค. total์ ๋ ์ด๋ธ ์์์ ์ด๊ธฐํํ๋ฏ๋ก ์ด๋ํ ๋ 0์ผ๋ก ๋๋์๊ฐ์ง ์์ต๋๋ค.
3. ์ค์ฒฉ Try ๋ฒ์ด๋๊ธฐ
# trace๊ฐ 1์ด ๋ ๋ค GoTo Finished๊ฐ trace=99๋ฅผ ๊ฑด๋๋๋๋ค. ์์ชฝ Finally๋ ์ซ์ 2, ๋ฐ๊นฅ์ชฝ์ 3์ ๋ถ์
๋๋ค. ๊ทธ ๋ค Finished์ ๋์ฐฉํ์ฌ 123์ ๋ฐํํฉ๋๋ค. ์ด ์ด๋์์ ๊ฐ Finally๋ ํ ๋ฒ์ฉ ์คํ๋ฉ๋๋ค.
Option Explicit On
Sub Main()
Var trace = 0
Try
Try
trace = trace * 10 + 1
GoTo Finished
trace = 99
Finally
trace = trace * 10 + 2
End Try
Finally
trace = trace * 10 + 3
End Try
Finished:
Return trace
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
trace๊ฐ 1์ด ๋ ๋ค GoTo Finished๊ฐ trace=99๋ฅผ ๊ฑด๋๋๋๋ค. ์์ชฝ Finally๋ ์ซ์ 2, ๋ฐ๊นฅ์ชฝ์ 3์ ๋ถ์ ๋๋ค. ๊ทธ ๋ค Finished์ ๋์ฐฉํ์ฌ 123์ ๋ฐํํฉ๋๋ค. ์ด ์ด๋์์ ๊ฐ Finally๋ ํ ๋ฒ์ฉ ์คํ๋ฉ๋๋ค.