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

Sub / Call / Exit Sub / End Sub

ClassicUO โ€ข Basic

Sub๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ์ด๋ฆ„ ์žˆ๋Š” ํ”„๋กœ์‹œ์ €๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. ์•„์ดํ…œ ์ฒ˜๋ฆฌ, ๊ฒ€์ฆ, ๋งˆ๋ฌด๋ฆฌ ์ž‘์—…์„ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ์€ ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ๋ณ„๋„์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

Sub name(parameters)
    statements
End Sub
name(arguments)
Call name(arguments)
Call name arguments
Call name
Exit Sub
Return
Return expression

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

  • name โ€” ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์ž‘์„ฑํ•œ ํ˜ธ์ถœ์—๋Š” UO.๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“ˆ ๋ฉค๋ฒ„๋Š” Tools.Work(...)๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Public/Private ์ ‘๊ทผ ๊ทœ์น™์€ Basic.Module ๋ฐ Basic.Visibility๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  • parameters / arguments โ€” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ด„ํ˜ธ ์•ˆ์— ์„ ์–ธํ•˜๊ณ  ์ธ์ˆ˜๋ฅผ ์„ ์–ธ ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์€ ByRef์ด๋ฉฐ ByVal์€ ๊ฐ’ ๋ณต์‚ฌ, Optional์€ ์ƒ๋žตํ•œ ๊ฐ’, ๋งˆ์ง€๋ง‰ ParamArray๋Š” ์ถ”๊ฐ€ ์ธ์ˆ˜ ๋ฌถ์Œ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹, ๋ฐฐ์—ด, ๊ณต์œ  ์ฐธ์กฐ, ๋˜์“ฐ๊ธฐ๋Š” ๋‹ค์„ฏ ๋งค๊ฐœ๋ณ€์ˆ˜ ์žฅ์—์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • statements / End Sub โ€” ๋ณธ๋ฌธ์€ ๋น„์–ด ์žˆ์–ด๋„ ๋˜์ง€๋งŒ End Sub๋กœ ๋‹ซ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์žฌ๊ท€๋ฅผ ํฌํ•จํ•˜์—ฌ ํ˜ธ์ถœ๋งˆ๋‹ค ๋ณ„๋„์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํ”„๋กœ์‹œ์ €๋Š” ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ ์ˆ˜์ค€์— ์„ ์–ธํ•˜๋ฉฐ ๋‹ค๋ฅธ ํ”„๋กœ์‹œ์ € ์•ˆ์— ์„ ์–ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Call โ€” name(arguments)์—์„œ Call์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. Call name arguments๋Š” ๊ด„ํ˜ธ ์—†๋Š” ์ธ์ˆ˜๋„ ํ—ˆ์šฉํ•˜๊ณ  Call name์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Call์€ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์ธ์ˆ˜ ํ‘œํ˜„์‹์˜ ์˜๋ฏธ๋Š” ๊ทธ๋Œ€๋กœ์ด๋ฉฐ ์‚ฌ์šฉ์ž ์ด๋ฆ„์— UO.๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Exit Sub / Return โ€” Exit Sub ๋˜๋Š” ํ‘œํ˜„์‹ ์—†๋Š” Return์€ ํ˜„์žฌ ํ˜ธ์ถœ์„ ๋๋ƒ…๋‹ˆ๋‹ค. Sub ์•ˆ์˜ Return expression์€ Basic ํ˜ธํ™˜ ํ™•์žฅ์ด๋ฉฐ ์ผ๋ฐ˜ VB.NET Sub์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. Sub ์•ˆ์—์„œ Exit Function์„ ์“ฐ๋ฉด ๋กœ๋“œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

End Sub, Exit Sub, ๋นˆ Return์€ Unit์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ์žˆ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋ฉฐ ์„ฑ๊ณต ํ”Œ๋ž˜๊ทธ๋‚˜ ID๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์กด Basic Sub๋Š” Return expression์œผ๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ByRef๋Š” ๋ณ„๋„๋กœ ํ˜ธ์ถœ์ž์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ๊ณ„์‚ฐ์šฉ ๋„์šฐ๋ฏธ์—๋Š” Function์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘

  • ์ค€๋น„ ๋‹จ๊ณ„๋Š” ํ˜ธํ™˜ ์„ ์–ธ๊ณผ Call ํ˜•์‹์„ ์ •๊ทœํ™”ํ•˜๊ณ  ๋ธ”๋ก์„ ๊ฒ€์ฆํ•˜๋ฉฐ ์ด๋ฆ„์„ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. ์ง„์ž… ์ „์— ์ธ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ์€ ์ค€๋น„๋œ ๋ช…๋ น์„ ์žฌ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ง€์—ญ ๊ฐ’์€ ๊ณต์œ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ˜ธ์ถœ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ค๊ณ  ๋ณธ๋ฌธ์„ ์‹คํ–‰ํ•œ ๋’ค ํ˜ธ์ถœ ๋‹ค์Œ ๋ฌธ์žฅ์œผ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์ •์ƒ ์ข…๋ฃŒ์™€ Exit Sub๋Š” ๋ฒ—์–ด๋‚˜๋Š” Finally๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜์“ฐ๊ธฐ๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” ํ™œ์„ฑ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ ์‹คํŒจํ•œ ํ˜ธ์ถœ์€ ์„ฑ๊ณต์„ ๋œปํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ผ์‹œ ์ค‘์ง€์™€ ์ •์ง€ ๊ฒ€์‚ฌ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์Šค๋ ˆ๋“œ, ์ž๋™ ์ง€์—ฐ, ์‹œ๊ฐ„ ์ œํ•œ์€ ์ƒ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌ๊ท€์—๋Š” ์ข…๋ฃŒ ์กฐ๊ฑด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Sub ์ด๋ฆ„์— ๋Œ€์ž…ํ•ด๋„ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ทธ ์šฉ๋„์—๋Š” Function์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘์ฒฉ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์€ ์ฝœ๋ฐฑ๊ณผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ํฌํ•จํ•ด 32ํ”„๋ ˆ์ž„์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ณผํ•˜๋ฉด ์žก์„ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊นŠ์€ ์ฒ˜๋ฆฌ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ฐ˜ํ™˜์ด๋‚˜ ์˜ค๋ฅ˜ ์‹œ ํ”„๋ ˆ์ž„์ด ํ•ด์ œ๋˜์–ด ์ดํ›„ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

1. ์„ธ ๊ฐ€์ง€ ํ˜ธ์ถœ ํ˜•์‹

# total์€ 4๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. AddAmount๋Š” total์„ ByRef๋กœ ๋ฐ›๊ณ  ์ƒ๋žตํ•œ amount๋Š” 1, ๋ช…์‹œํ•œ 3๊ณผ 2๋Š” ByVal์ž…๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์žˆ๋Š” Call, ๊ด„ํ˜ธ ์—†๋Š” Call, ์ผ๋ฐ˜ ํ˜ธ์ถœ์€ ๊ฐ™์€ ๋„์šฐ๋ฏธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Main์€ 4+1+3+2=10์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Sub AddAmount(ByRef total, Optional ByVal amount=1)
    total += amount
End Sub

Sub Main()
    Dim total=4
    Call AddAmount(total)
    Call AddAmount total, 3
    AddAmount(total, 2)
    Return total
End Sub

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

total์€ 4๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. AddAmount๋Š” total์„ ByRef๋กœ ๋ฐ›๊ณ  ์ƒ๋žตํ•œ amount๋Š” 1, ๋ช…์‹œํ•œ 3๊ณผ 2๋Š” ByVal์ž…๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์žˆ๋Š” Call, ๊ด„ํ˜ธ ์—†๋Š” Call, ์ผ๋ฐ˜ ํ˜ธ์ถœ์€ ๊ฐ™์€ ๋„์šฐ๋ฏธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Main์€ 4+1+3+2=10์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ณต๊ฐœ ์ง„์ž…์ ๊ณผ ๋น„๊ณต๊ฐœ ๋„์šฐ๋ฏธ

# Batches.SumInto๋Š” total์„ ByRef๋กœ ๋ฐ›๊ณ  3,-9,4๋ฅผ values์— ๋ชจ์๋‹ˆ๋‹ค. For Each๊ฐ€ AppendAmount๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฒ€์‚ฌ๋Š” ๋„์šฐ๋ฏธ๋งŒ ์ข…๋ฃŒํ•˜๋ฏ€๋กœ -9๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ˜๋ณต์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ๊ฐ’ 2์—์„œ 2+3+4=9๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ๋Š” ๊ณต๊ฐœ๋œ ์ „์ฒด ๋ชจ๋“ˆ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Module Batches
    Private Sub AppendAmount(ByRef total, ByVal value)
        If value < 0 Then
            Exit Sub
        End If
        total += value
    End Sub

    Public Sub SumInto(ByRef total, ParamArray values)
        For Each value In values
            AppendAmount(total, value)
        Next
    End Sub
End Module

Sub Main()
    Dim total=2
    Batches.SumInto(total, 3, -9, 4)
    Return total
End Sub

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

Batches.SumInto๋Š” total์„ ByRef๋กœ ๋ฐ›๊ณ  3,-9,4๋ฅผ values์— ๋ชจ์๋‹ˆ๋‹ค. For Each๊ฐ€ AppendAmount๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฒ€์‚ฌ๋Š” ๋„์šฐ๋ฏธ๋งŒ ์ข…๋ฃŒํ•˜๋ฏ€๋กœ -9๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ˜๋ณต์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ๊ฐ’ 2์—์„œ 2+3+4=9๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ๋Š” ๊ณต๊ฐœ๋œ ์ „์ฒด ๋ชจ๋“ˆ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

3. ์กฐ๊ธฐ ์ข…๋ฃŒ์™€ ์ •๋ฆฌ

# Finish๋Š” trace=1์„ ์„ค์ •ํ•˜๊ณ  ์ข…๋ฃŒํ•˜์—ฌ trace=99๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Finally๊ฐ€ 2๋ฅผ ๋ง๋ถ™์—ฌ trace=12๋ฅผ ByRef๋กœ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. LegacyValue๋Š” Basic Sub์˜ Return 7์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. Main์€ 12*10+7=127์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. trace ์ˆซ์ž๋Š” ์˜ˆ์ œ์—์„œ ์ •ํ•œ ๊ฐ’์ด๋ฉฐ ๊ฒŒ์ž„ ๊ฒฐ๊ณผ ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
Option Explicit On
Sub Finish(ByRef trace)
    Try
        trace=1
        Exit Sub
        trace=99
    Finally
        trace=trace*10+2
    End Try
End Sub

Sub LegacyValue()
    Return 7
End Sub

Sub Main()
    Dim trace=0
    Call Finish(trace)
    Return trace*10+LegacyValue()
End Sub

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

Finish๋Š” trace=1์„ ์„ค์ •ํ•˜๊ณ  ์ข…๋ฃŒํ•˜์—ฌ trace=99๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Finally๊ฐ€ 2๋ฅผ ๋ง๋ถ™์—ฌ trace=12๋ฅผ ByRef๋กœ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. LegacyValue๋Š” Basic Sub์˜ Return 7์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. Main์€ 12*10+7=127์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. trace ์ˆซ์ž๋Š” ์˜ˆ์ œ์—์„œ ์ •ํ•œ ๊ฐ’์ด๋ฉฐ ๊ฒŒ์ž„ ๊ฒฐ๊ณผ ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


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

Basic