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

Function / Return / Exit Function / End Function

ClassicUO โ€ข Basic

Function์€ ์ˆ˜๋Ÿ‰, ๋ฌธ์ž์—ด, List/Dictionary ์ฐธ์กฐ ๋“ฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋„์šฐ๋ฏธ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ•จ์ˆ˜์—๋Š” UO.๊ฐ€ ํ•„์š” ์—†์œผ๋ฉฐ Function GetType(value)๋ฅผ ์„ ์–ธํ•ด๋„ UO.GetType(item)์€ ๋ณ„๋„์˜ ๊ฒŒ์ž„ API๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

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

Function name(parameters) As type
    name = expression
End Function
Function name(parameters)
    Return expression
End Function
result = name(arguments)
Exit Function
Return

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

  • name โ€” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ด๋ฆ„์€ ํ˜ธ์ถœ ์ด๋ฆ„์ด์ž ๋ณธ๋ฌธ ์•ˆ์˜ ์•”์‹œ์  ์ง€์—ญ ๊ฒฐ๊ณผ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. name์€ ํ˜„์žฌ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ณ  name(arguments)๋Š” ์žฌ๊ท€๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Dim, Var, Const ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์„ ์–ธํ•˜์ง€ ๋งˆ์„ธ์š”.
  • parameters / arguments โ€” ์œ„์น˜ ์ธ์ˆ˜๋Š” Sub์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ByRef, ByVal, Optional, ๋งˆ์ง€๋ง‰ ParamArray ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. Basic.Parameters ๋ฐ ๊ฐœ๋ณ„ ์žฅ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ๋ชจ๋“ˆ ํ•จ์ˆ˜ Tools.Calculate(...)๋Š” Public/Private ์ ‘๊ทผ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • As type โ€” ์„ ํƒ์  ๊ฒฐ๊ณผ ํ˜•์‹์ž…๋‹ˆ๋‹ค. Integer/Long/Short/Byte๋Š” ์—”์ง„์˜ Integer, Double/Single/Decimal์€ Double, String์€ ํ…์ŠคํŠธ, Boolean/Bool์€ 1/0 ์ •๊ทœํ™”, Object/Variant๋Š” ๊ฐ’์˜ ์ข…๋ฅ˜ ๋ณด์กด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. VB.NET์˜ ๋ชจ๋“  ์ˆซ์ž ๋น„ํŠธ ํญ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ํ˜•์‹์€ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. As๊ฐ€ ์—†์œผ๋ฉด Variant์ด๋ฉฐ ์ด๋ฆ„ ์ ‘๋ฏธ์‚ฌ๋กœ ๊ฒฐ๊ณผ ํ˜•์‹์„ ์ถ”๋ก ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • name = expression โ€” ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ฌธ์žฅ์„ ๊ณ„์† ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ฝ๊ฑฐ๋‚˜ += ๋“ฑ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ˜ธ์ถœ์˜ ์ง€์—ญ ๋ณ€์ˆ˜์ด๋ฉฐ ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ์ƒˆ ํ˜ธ์ถœ์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • Return / Exit Function / End Function โ€” Return expression์€ ํ˜•์‹์ด ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ž…ํ•˜๊ณ  ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋นˆ Return, Exit Function, End Function ๋„๋‹ฌ์€ ํ˜„์žฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. End Function์€ ํ•„์ˆ˜์ด๋ฉฐ Function ์•ˆ์˜ Exit Sub๋Š” ๋กœ๋“œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

์ •์ƒ Finally ์ฒ˜๋ฆฌ ํ›„์˜ ํ˜„์žฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์€ Integer 0, Double 0.0, Boolean FALSE/0, String ๋นˆ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ํ˜•์‹ ์ƒ๋žต ๋ฐ Variant/Object๋Š” ์˜๋ฏธ ์žˆ๋Š” ๊ฐ’์ด ์—†๋Š” Unit์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. List/Dictionary/Object๋Š” ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Boolean์€ ์ˆซ์ž 1/0์ด๋ฏ€๋กœ TRUE/FALSE์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž„์˜์˜ ์ˆ˜๋Ÿ‰์ด๋‚˜ ID๋Š” ์ž๋™ ์„ฑ๊ณต ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

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

์˜ˆ์ œ

1. ๋Œ€์ž… ํ›„ ๊ณ„์† ์‹คํ–‰

# TotalPrice๋Š” count์™€ price๋ฅผ ByVal๋กœ ๋ฐ›๊ณ  Integer๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜๋Š” ์ฆ‰์‹œ -1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ ์™ธ์—๋Š” count*price๋ฅผ ์ €์žฅํ•œ ๋‹ค์Œ ๊ณ ์ •๊ฐ’ 2๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค. (3,4)๋Š” 14, (-1,4)๋Š” -1์ด ๋˜์–ด Main์€ 14:-1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. -1์€ ๋„์šฐ๋ฏธ์—์„œ ์ •ํ•œ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.
Option Explicit On
Function TotalPrice(ByVal count, ByVal price) As Integer
    If count < 0 OrElse price < 0 Then
        Return -1
    End If
    TotalPrice=count*price
    TotalPrice+=2
End Function

Sub Main()
    Return CStr(TotalPrice(3, 4)) & ":" & CStr(TotalPrice(-1, 4))
End Sub

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

TotalPrice๋Š” count์™€ price๋ฅผ ByVal๋กœ ๋ฐ›๊ณ  Integer๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜๋Š” ์ฆ‰์‹œ -1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ ์™ธ์—๋Š” count*price๋ฅผ ์ €์žฅํ•œ ๋‹ค์Œ ๊ณ ์ •๊ฐ’ 2๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค. (3,4)๋Š” 14, (-1,4)๋Š” -1์ด ๋˜์–ด Main์€ 14:-1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. -1์€ ๋„์šฐ๋ฏธ์—์„œ ์ •ํ•œ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

2. ๋…๋ฆฝ๋œ ์žฌ๊ท€ ๊ฒฐ๊ณผ

# Factorial์€ n์„ ByVal๋กœ ๋ฐ›๊ณ  ๊ฒฐ๊ณผ๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. n<=1์ด๋ฉด Exit Function์œผ๋กœ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์•„๋‹ˆ๋ฉด ์ƒˆ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด n*Factorial(n-1)์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์Œ์ด ์•„๋‹Œ ์ž…๋ ฅ์—์„œ 5!+3!=120+6=126์ž…๋‹ˆ๋‹ค. ์Œ์ˆ˜๋„ ๊ธฐ๋ณธ ๋ถ„๊ธฐ๋กœ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์ด ์˜ˆ์ œ๋Š” ํŒฉํ† ๋ฆฌ์–ผ์˜ ์ „์ฒด ์ˆ˜ํ•™์  ์ •์˜์—ญ์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Option Explicit On
Function Factorial(ByVal n) As Integer
    Factorial=1
    If n <= 1 Then
        Exit Function
    End If
    Factorial=n*Factorial(n-1)
End Function

Sub Main()
    Return Factorial(5)+Factorial(3)
End Sub

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

Factorial์€ n์„ ByVal๋กœ ๋ฐ›๊ณ  ๊ฒฐ๊ณผ๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. n<=1์ด๋ฉด Exit Function์œผ๋กœ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์•„๋‹ˆ๋ฉด ์ƒˆ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด n*Factorial(n-1)์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์Œ์ด ์•„๋‹Œ ์ž…๋ ฅ์—์„œ 5!+3!=120+6=126์ž…๋‹ˆ๋‹ค. ์Œ์ˆ˜๋„ ๊ธฐ๋ณธ ๋ถ„๊ธฐ๋กœ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์ด ์˜ˆ์ œ๋Š” ํŒฉํ† ๋ฆฌ์–ผ์˜ ์ „์ฒด ์ˆ˜ํ•™์  ์ •์˜์—ญ์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. Return, ๋‘ Finally, ByRef

# Calculate๋Š” trace๋ฅผ ByRef๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. Return 1์ด ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ชฝ Finally๋Š” ๊ฒฐ๊ณผ์™€ trace๋ฅผ 1์—์„œ 12๋กœ, ๋ฐ”๊นฅ์ชฝ์€ 123์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Main์€ ๋‘ ๊ฐ’ 123์„ ๋ฐ›์•„ 123:123์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Return expression ์ดํ›„์—๋„ Finally๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ด๋™์ด๋‚˜ ์‹œ๊ฐ„์„ ํ‰๋‚ด ๋‚ด๋Š” ์˜ˆ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
Option Explicit On
Function Calculate(ByRef trace) As Integer
    Try
        Try
            trace=1
            Return 1
        Finally
            Calculate=Calculate*10+2
            trace=trace*10+2
        End Try
    Finally
        Calculate=Calculate*10+3
        trace=trace*10+3
    End Try
End Function

Sub Main()
    Dim trace=0
    Dim result=Calculate(trace)
    Return CStr(result) & ":" & CStr(trace)
End Sub

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

Calculate๋Š” trace๋ฅผ ByRef๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. Return 1์ด ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ชฝ Finally๋Š” ๊ฒฐ๊ณผ์™€ trace๋ฅผ 1์—์„œ 12๋กœ, ๋ฐ”๊นฅ์ชฝ์€ 123์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Main์€ ๋‘ ๊ฐ’ 123์„ ๋ฐ›์•„ 123:123์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Return expression ์ดํ›„์—๋„ Finally๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ด๋™์ด๋‚˜ ์‹œ๊ฐ„์„ ํ‰๋‚ด ๋‚ด๋Š” ์˜ˆ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


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

Basic