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์ด๋ฉฐ ๋ ˆ์ด๋ธ”์€ ๋ณ„๋„ ํ”„๋กœ์‹œ์ €๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


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

Basic