API Basic OnError ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
On Error / Resume
ClassicUO โข Basic
On Error๋ ํ์ฌ ํ๋ก์์ ๋ ํจ์์์ ์ดํ ์คํ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ๋ฐฉ์์ ์ ํํฉ๋๋ค. API ํธ์ถ์ด ์๋ ์ธ์ด ๋ฌธ์ฅ์ ๋๋ค. ๊ตฌ์กฐํ๋ ๋ณต๊ตฌ์ ์ ๋ฆฌ๋ Try/Catch/Finally๋ฅผ ์ฌ์ฉํ์ธ์.
์ ํํ ๊ตฌ๋ฌธ
On Error GoTo label
On Error Resume Next
On Error GoTo 0
label:
Resume
Resume Next
๋งค๊ฐ๋ณ์
labelโ ๊ฐ์ ํ๋ก์์ ์ ์๋ ๋ ์ด๋ธ์ label:๋ก ๋ณ๋ ์ค์ ์๋๋ค. On Error ์ ํ ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ํจ์๋ช , ๋ฌธ์์ด, ์์ค ์ค ๋ฒํธ๊ฐ ์๋๋๋ค. ์๋ ๋ ์ด๋ธ์ SC009๋ฅผ ๋ฐ์์ํค๋ฉฐ ํด๋ผ์ด์ธํธ๊ฐ ์คํ์ ๋ง์ต๋๋ค.Resume Next / On Errorโ On Error Resume Next๋ ๋ ์ด๋ธ๋ก ์ด๋ํ์ง ์๊ณ ์คํจํ ๋ช ๋ น ๋ค์์ผ๋ก ์๋ ์งํํฉ๋๋ค. ์ฑ๊ณตํ ๋ช ๋ น์๋ ์ํฅ์ด ์์ต๋๋ค. ํ์ฌ ํ๋ก์์ ํธ์ถ์๋ง ์ ์ฉํ๋ฉฐ ๋ชจ๋ ์คํฌ๋ฆฝํธ์ ์ ์ฉํ์ง ์์ต๋๋ค.0โ On Error GoTo 0์ ๋ชจ๋๋ฅผ ๋๋๋ค. 0์ ํน๋ณํ ์ ์ด๊ฐ์ด์ง ๋ ์ด๋ธ์ด๋ Boolean ๊ฒฐ๊ณผ๊ฐ ์๋๋๋ค. ๋ค๋ฅธ ์ซ์ ๋ ์ด๋ธ๊ณผ GoTo -1์ ์ง์ํ์ง ์์ต๋๋ค.Resume / Resume Nextโ ์ฒ๋ฆฌ๊ธฐ ์์ Resume๋ ์คํจํ ๋ช ๋ น์ ์ฌ์๋ํ๊ณ Resume Next๋ ๊ทธ ๋ค์์ผ๋ก ๊ฐ๋๋ค. ๊ธฐ๋ก๋ ์คํ ์ค๋ฅ๊ฐ ํ์ํ๋ฉฐ ์ด๋ ํ ๊ทธ ์ฃผ์๋ฅผ ์ง์๋๋ค. ๋ ์ด๋ธ์ด๋ ์๊ฐ ์ ํ ์ธ์๋ฅผ ๋ฐ์ง ์์ต๋๋ค.
๋ฐํ๊ฐ
On Error์ Resume์๋ ๋ฐํ๊ฐ์ด ์์ต๋๋ค. ์ก์ ์ค๋ฅ๊ฐ TRUE/FALSE๋ก ๋ฐ๋๊ฑฐ๋ ๋์ ์ด ์๋ ๋ณต๊ตฌ๋์ง ์์ต๋๋ค. ์์ ๋ Integer 5,18,10์ ๋ช ์์ ์ผ๋ก ๋ฐํํฉ๋๋ค. ์์ ๋ฐ์ํ ๋ถ์ ํจ๊ณผ๋ ์๋์ผ๋ก ๋๋๋ฆฌ์ง ์์ต๋๋ค.
๋์
- ์ค๋น ๋จ๊ณ์์ ํ๋ก์์ ์ ์ฒด๋ฅผ ์ฝ์ ๋ค ๋ ์ด๋ธ์ ํด๊ฒฐํ๋ฏ๋ก ์๋ฐฉํฅ ๋ชจ๋ ๋ฉ๋๋ค. ์คํ ์ค ๋ชจ๋๋ฅผ ์ ์ฅํ๋ฉฐ ์์ธ๊ฐ ์๊ธฐ๋ฉด ๊ตฌ์กฐํ๋ Try๋ฅผ ๋จผ์ , On Error๋ฅผ ๋์ค์ ๊ณ ๋ คํฉ๋๋ค.
- ์์ง์ ์คํจํ ๋ช ๋ น ์ฃผ์๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ๋ ์ด๋ธ ๋ชจ๋๋ ์ฒ๋ฆฌ๊ธฐ๋ก, ์๋ Resume Next๋ ๋ช ๋ น ๋ค์์ผ๋ก ๊ฐ๋๋ค. Resume๋ ์๊ณผ ํธ์ถ์ ๋ค์ ํ๊ฐํ๋ฏ๋ก ์์ธ์ ๋จผ์ ๊ณ ์น๊ณ ๋ฐ๋ณต๋๋ ๋ถ์ ํจ๊ณผ๋ฅผ ๊ณ ๋ คํ์ธ์.
- GoTo 0์ ๋ณด๋ฅ๋ ์คํจ ์ฃผ์๋ฅผ ์ง์ฐ์ง ์์ต๋๋ค. ์ฒ๋ฆฌ๊ธฐ๋ ์์ ์ ๋๊ณ ๋ณต๊ตฌํ ๋ค Resumeํ ์ ์์ต๋๋ค. ์ค๋ฅ ๊ฐ๋ฅํ ์ฒ๋ฆฌ๊ธฐ ์์ ์ ์ ๋ชจ๋๋ฅผ ๊บผ ๊ฐ์ ์ฒ๋ฆฌ๊ธฐ๋ก ์ฌ์ง์ ํ์ง ์๊ฒ ํ์ธ์.
- ๋ฌธ๋ฒ ์ค๋ฅ์ ์คํ ์ทจ์๋ ๋ณต๊ตฌํ์ง ์์ต๋๋ค. ๋ช ๋ น์ด ์์ธ ์์ด 0, FALSE, ์คํจ ์ํ๋ง ๋ฐํํ๋ฉด On Error๋ ํธ์ถ๋์ง ์์ต๋๋ค. ํด๋น ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฌํ์ธ์.
- Return์ด๋ GoTo๋ก ์ ์ ํ๋ฆ์ด ์ฒ๋ฆฌ๊ธฐ์ ๋ค์ด๊ฐ์ง ์๊ฒ ํ์ธ์. ํธ์ถ๋ ํ๋ก์์ ๋ ๊ณ ์ ์ํ๋ฅผ ๊ฐ์ง๋ฉฐ ๋ฏธ์ฒ๋ฆฌ ์ค๋ฅ๊ฐ ํธ์ถ์๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค. ๊ทธ๊ณณ์ Resume๋ ๋ด๋ถ ํ ์ค์ด ์๋ ์ ์ฒด ํธ์ถ ๋ช ๋ น์ ๋ฐ๋ณตํฉ๋๋ค. ์๋ ์ฌ์๋ ์ ํ์ด๋ ๋๊ธฐ๋ ์์ต๋๋ค.
- ์ ๋ฆฌ ํ Try๋ฅผ ๋ฒ์ด๋ ์ค๋ฅ๊ฐ ์ธ๋ถ On Error GoTo ์ฒ๋ฆฌ๊ธฐ๋ก ๊ฐ๋ฉด Resume์ ํค๋๋ถํฐ ์ ์ฒด Try๋ฅผ ์ฌ์๋ํฉ๋๋ค. Resume Next์ On Error Resume Next๋ End Try ๋ฐ๋ก ๋ค์ ๋ฌธ์ฅ์์ ๊ณ์ํฉ๋๋ค. ์๋ฃํ ์์ ์ด ๋ฐ๋ณต๋ ์ ์์ผ๋ฉฐ ์ ๋ฆฌ๋ ๋ณธ๋ฌธ ์ค๊ฐ์ผ๋ก ๋์๊ฐ์ง ์์ต๋๋ค.
์์
1. ์คํจํ ๋์ ํ๋ ๊ฑด๋๋ฐ๊ธฐ
# values[0]์ ํ ์
์ด๋ฉฐ ์ธ๋ฑ์ค 5๋ ์๋ชป๋์์ต๋๋ค. result=1์
๋๋ค. On Error Resume Next๊ฐ ๋์
์ ์คํจํ ์ฝ๊ธฐ๋ฅผ ๊ฑด๋๋ฐ์ด 1์ ์ ์งํฉ๋๋ค. GoTo 0์ผ๋ก ๋๊ณ result+=4๋ฅผ ํ๋ฉด 5์
๋๋ค. Main์ 5๋ฅผ ๋ฐํํ์ง๋ง ์ฝ๊ธฐ ์ฑ๊ณต์ ๋ปํ์ง ์์ต๋๋ค.
Option Explicit On
Sub Main()
Dim values[0]
Var result = 1
On Error Resume Next
result = values[5]
On Error GoTo 0
result += 4
Return result
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
values[0]์ ํ ์ ์ด๋ฉฐ ์ธ๋ฑ์ค 5๋ ์๋ชป๋์์ต๋๋ค. result=1์ ๋๋ค. On Error Resume Next๊ฐ ๋์ ์ ์คํจํ ์ฝ๊ธฐ๋ฅผ ๊ฑด๋๋ฐ์ด 1์ ์ ์งํฉ๋๋ค. GoTo 0์ผ๋ก ๋๊ณ result+=4๋ฅผ ํ๋ฉด 5์ ๋๋ค. Main์ 5๋ฅผ ๋ฐํํ์ง๋ง ์ฝ๊ธฐ ์ฑ๊ณต์ ๋ปํ์ง ์์ต๋๋ค.
2. ์์ ํ ์ฌ์๋
# ReadCell์ ์
0์ 8์ ์ ์ฅํ์ง๋ง index=2์
๋๋ค. ์ค๋ฅ๋ก FixIndex์ ๊ฐ๋๋ค. GoTo 0์ผ๋ก ๋๊ณ handled=1, index=0์ผ๋ก ๋ฐ๊ฟ๋๋ค. Resume๊ฐ result=values[index]๋ฅผ ๋ฐ๋ณตํด 8์ ์ ์ฅํฉ๋๋ค. Return์ ์ ์ ํ๋ฆ์ ์ฒ๋ฆฌ๊ธฐ ์ง์
์ ๋ง์ผ๋ฉฐ Main์ 18์ ๋ฐ์ต๋๋ค.
Option Explicit On
Function ReadCell()
Dim values[0]
values[0] = 8
Var index = 2
Var handled = 0
Var result = 0
On Error GoTo FixIndex
result = values[index]
Return handled * 10 + result
FixIndex:
On Error GoTo 0
handled += 1
index = 0
Resume
End Function
Sub Main()
Return ReadCell()
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
ReadCell์ ์ 0์ 8์ ์ ์ฅํ์ง๋ง index=2์ ๋๋ค. ์ค๋ฅ๋ก FixIndex์ ๊ฐ๋๋ค. GoTo 0์ผ๋ก ๋๊ณ handled=1, index=0์ผ๋ก ๋ฐ๊ฟ๋๋ค. Resume๊ฐ result=values[index]๋ฅผ ๋ฐ๋ณตํด 8์ ์ ์ฅํฉ๋๋ค. Return์ ์ ์ ํ๋ฆ์ ์ฒ๋ฆฌ๊ธฐ ์ง์ ์ ๋ง์ผ๋ฉฐ Main์ 18์ ๋ฐ์ต๋๋ค.
3. ๋ฑ๋ก๋ณด๋ค ์์ ์ฒ๋ฆฌ๊ธฐ
# ์ฒ์ GoTo Work๋ก Failed๋ฅผ ๊ฑด๋๋๋๋ค. On Error GoTo Failed๊ฐ ์์ ๋ ์ด๋ธ์ ๋ฑ๋กํฉ๋๋ค. ์ธ๋ฑ์ค 2๋ result๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ ์คํจํฉ๋๋ค. ์ฒ๋ฆฌ๊ธฐ๋ ์์ ์ ๋๊ณ handled๋ฅผ ๋๋ฆฐ ๋ค Resume Next๋ก Return์ ๊ฐ๋๋ค. ๊ฒฐ๊ณผ๋ 10์ด๋ฉฐ ๋ ์ด๋ธ์ ๋ณ๋ ํ๋ก์์ ๊ฐ ์๋๋๋ค.
Option Explicit On
Sub Main()
Dim values[0]
Var result = 0
Var handled = 0
GoTo Work
Failed:
On Error GoTo 0
handled += 1
Resume Next
Work:
On Error GoTo Failed
result = values[2]
Return handled * 10 + result
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
์ฒ์ GoTo Work๋ก Failed๋ฅผ ๊ฑด๋๋๋๋ค. On Error GoTo Failed๊ฐ ์์ ๋ ์ด๋ธ์ ๋ฑ๋กํฉ๋๋ค. ์ธ๋ฑ์ค 2๋ result๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ ์คํจํฉ๋๋ค. ์ฒ๋ฆฌ๊ธฐ๋ ์์ ์ ๋๊ณ handled๋ฅผ ๋๋ฆฐ ๋ค Resume Next๋ก Return์ ๊ฐ๋๋ค. ๊ฒฐ๊ณผ๋ 10์ด๋ฉฐ ๋ ์ด๋ธ์ ๋ณ๋ ํ๋ก์์ ๊ฐ ์๋๋๋ค.