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๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๊ฒ์ ์ด๋์ด๋ ์๊ฐ์ ํ๋ด ๋ด๋ ์์ ๊ฐ ์๋๋๋ค.