API Basic Optional ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Optional
ClassicUO โข Basic
๋งค๊ฐ๋ณ์๋ SUB/FUNCTION์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ByRef๋ ๋ณ๊ฒฝ ๊ฐ์ ํธ์ถ์์๊ฒ ๊ธฐ๋กํ๊ณ ByVal์ ํธ์ถ์์ ๋ณ์๋ฅผ ๋ณด์กดํฉ๋๋ค. Optional์ ์๋ตํ ์ธ์๋ฅผ ๋ณด์ถฉํ๊ณ ParamArray๋ ๋๋จธ์ง ์ธ์๋ฅผ ๋ชจ์๋๋ค. ํธ์ถ ๋ช ๋ น์ด ์๋๋ผ ์ ์ธ ํ์ ์์ ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
Function Scale(ByVal value, Optional ByVal factor = 2)
Scale(3)
Scale(3, 4)
๋งค๊ฐ๋ณ์
name / As typeโ name / As type: ๋งค๊ฐ๋ณ์ ์ด๋ฆ๊ณผ ์ ํ์ ์ธ As ์ ๋ ฅ ํ์ ๋ณํ์ ๋๋ค. ์์น ๋๋ name:=value๋ก ์ฐ๊ฒฐํ๋ฉฐ ํ์ ์๋ ์ ์ธ์ ์๋๋ค. Basic.NamedArguments๋ฅผ ์ฐธ๊ณ ํ์ธ์.ByRefโ ByRef: ์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ณ์ ๋๋ ๊ธฐ์กด ์ธ๋ฑ์ค ์์์ ๋๋ค. ์ด ์์ง์ ByVal์ด ์์ด๋ ๊ฐ์ ๋ค์ ๊ธฐ๋กํ๋ฏ๋ก VB.NET ๊ธฐ๋ณธ๊ฐ๊ณผ ๋ค๋ฆ ๋๋ค. ๋ฆฌํฐ๋ด, ์์, ๊ณ์ฐ์์ ์์ ๊ฐ์ ๋๋ค.ByValโ ByVal: ๊ฐ์ ์ง์ญ ๋ณต์ฌ๋ณธ์ ๋๋ค. ๋งค๊ฐ๋ณ์์ ๋์ ํด๋ ํธ์ถ์์ ๋ณ์๋ฅผ ๊ต์ฒดํ์ง ์์ต๋๋ค. ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ๊ณต์ ํ๋ฉฐ ๊น์ ๋ณต์ฌ๊ฐ ์๋๋๋ค.Optional / defaultValueโ Optional / defaultValue: ๋ง์ง๋ง ์ธ์๋ฅผ ์๋ตํ๋ฉด = ๋ค์ ์์ ๊ณ์ฐํฉ๋๋ค. ๋ช ์์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ์ธ์. ์์ผ๋ฉด ์๋ต๋ ๋งค๊ฐ๋ณ์๋ ์ด๊ธฐํ๋์ง ์์ Unit์ ๋ฐ์ต๋๋ค.ParamArrayโ ParamArray values(): ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ๋๋จธ์ง ๊ฐ์ 0๊ฐ ์ด์ ๋ฐ์ต๋๋ค. ๋ฐฐ์ด ํ๋๋ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ค์นผ๋ผ ์ธ์๋ ์ ๋ฐฐ์ด๋ก ๋ฌถ์ต๋๋ค. GetArrayLength๋ ๊ธธ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐํ๊ฐ
ํ์ ์๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. RETURN์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ์ค์ ํฉ๋๋ค. ByRef๋ ์ธ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด์ง ๋ฐํ๊ฐ์ด ์๋๋๋ค. RETURN ์๋ SUB๋ Unit์ ๋ง๋ญ๋๋ค. ์์ ์ซ์๋ ๊ณ์ฐ ๊ฒฐ๊ณผ์ด๋ฉฐ TRUE/FALSE ํ๋๊ทธ๊ฐ ์๋๋๋ค.
๋์
- ์ธ์๋ ์ผ์ชฝ๋ถํฐ ํ ๋ฒ์ฉ ๊ณ์ฐํฉ๋๋ค. ์ธ๋ฑ์ค ByRef๋ ์ปจํ ์ด๋์ ์ธ๋ฑ์ค/ํค๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ค๋ฅธ ์ธ์๊ฐ ์ปจํ ์ด๋ ๋ณ์๋ฅผ ์ฌ๋์ ํด๋ ๊ธฐ๋ก ์์น๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
- ์ง์ ํ ๋ ์ง์ญ ๋งค๊ฐ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. ์ข ๋ฃ ์ ๋ด๋ถ FINALLY ๋ค์ ๋งค๊ฐ๋ณ์ ์์๋๋ก ByRef ๊ฐ์ ๊ธฐ๋กํ๋ฉฐ ๋ณธ๋ฌธ์์ ์ค๋ฅ๋ก ๋์ฌ ๋๋ ๊ฐ์ต๋๋ค. ๊ฐ์ ๋ณ์๋ฅผ ๋ ๋ฒ ์ ๋ฌํด๋ ์ง์ญ ๋งค๊ฐ๋ณ์๊ฐ ์ฆ์ ์ฐ๊ฒฐ๋์ง๋ ์์ต๋๋ค. ๋ง์ง๋ง ๊ธฐ๋ก์ด ๋จ์ต๋๋ค.
- ByVal์ ํธ์ถ์ ๋ณ์์ ๊ต์ฒด๋ฅผ ๋ง์ง๋ง ๊ณต์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๋ด๋ถ ์์ ์ ํ์ฉํฉ๋๋ค. ReDim์ ์ ์ง์ญ ์ฐธ์กฐ๋ฅผ ๋ง๋ญ๋๋ค. ๋ ๋ฆฝ ๋ฐ์ดํฐ์๋ ๋ช ์์ ๋ณต์ฌ๊ฐ ํ์ํฉ๋๋ค.
- ์์น ์ธ์ ํธ์ถ: Optional์ ๋ค์์๋ถํฐ ์๋ตํ๋ฉฐ ์ผํ ์ฌ์ด์ ๋น ์ธ์๋ ์ง์ํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์์ ์๋ตํ ๋๋ง๋ค ์คํํ๋ ์์ง ์์ด๋ฉฐ VB.NET ์์์ผ ํ์๊ฐ ์์ต๋๋ค. ์์น ์ธ์๋ฅผ ๋จผ์ ์ฐ๊ณ ์ฒซ ์ด๋ฆ ์๋ ์ธ์ ๋ค์๋ ๋ชจ๋ ์ด๋ฆ์ ์ง์ ํ์ธ์. ํ์ ๋งค๊ฐ๋ณ์๋ ์๋ตํ ์ ์์ต๋๋ค. ์๋ตํ ์คํฌ๋ฆฝํธ Optional์ ์ ๋ฌ ์์ ๊ณ์ฐํ ๋ค ์ ์ธ ์์๋๋ก ๊ธฐ๋ณธ ์์ ๊ณ์ฐํฉ๋๋ค. ๋ค์ดํฐ๋ธ ์ค๋ฒ๋ก๋๋ ๋ฑ๋ก๋ ์ด๋ฆ๊ณผ ๊ฐ์๋ง ์ฌ์ฉํ๋ฉฐ ์์ ๊ธฐ๋ณธ๊ฐ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
- ParamArray๋ ๋ฌถ์ธ ์ค์นผ๋ผ๋ฅผ ์๋ ๋ณ์์ ๋ค์ ์ฐ์ง ์์ต๋๋ค. ๋ฐฐ์ด์ ๋ช ์์ ์ผ๋ก ์ ๋ฌํ๋ฉด ์์ ๋ณ๊ฒฝ์ด ํธ์ถ์์๊ฒ ๋ณด์ ๋๋ค. ๋ค๋ฅธ ParamArray๋ก ์ ๋ฌํด๋ ์ค์ฒฉ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
- ์๋๋ฅผ ๋๋ฌ๋ด๋๋ก ByRef์ ByVal์ ๋ช ์ํ์ธ์. ์ด ๊ท์น์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ์ ํ๋ก์์ ๋ฅผ ํธ์ถํ ๋ ์ ์ฉ๋๋ฉฐ ๋ด์ฅ ๋ช ๋ น ์ธ์๋ ๊ฐ ๋ฌธ์์ ์ค๋ช ํฉ๋๋ค.
- ParamArray๋ ์ด๋ฆ์ผ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ฆ ์๋ ํธ์ถ์์๋ ๋น์ ๋ ์ ์์ง๋ง ์์๋ฅผ ์ ๋ฌํ๋ ค๋ฉด ๋ชจ๋ ์์น ์ธ์๋ก ํธ์ถํด์ผ ํฉ๋๋ค. ์ผํ ์ฌ์ด ๋น ์๋ฆฌ๋ ์ง์ํ์ง ์์ต๋๋ค. ์ด ๋ถ๋ถ์งํฉ์ ์์น ์ธ์ ์ฐ์ ์ด๋ฉฐ ์ต์ VB.NET์ ์์ ํผํฉ์ ์๋๋๋ค. ์ค๋ ๋๋ ๊ฒ์ ์ง์ฐ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
์์
1. ์๋ตํ ๋ฐฐ์์ ๋ช ์ํ ๋ฐฐ์
# Scale(3)์ factor=2๋ก 6์ ๋ฐํํ๊ณ Scale(3,4)๋ 4๋ก 12๋ฅผ ๋ฐํํฉ๋๋ค. Main์ 6*100+12, Integer 612๋ฅผ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function Scale(ByVal value, Optional ByVal factor = 2)
Return value * factor
End Function
Sub Main()
Return Scale(3) * 100 + Scale(3, 4)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Scale(3)์ factor=2๋ก 6์ ๋ฐํํ๊ณ Scale(3,4)๋ 4๋ก 12๋ฅผ ๋ฐํํฉ๋๋ค. Main์ 6*100+12, Integer 612๋ฅผ ๋ฐํํฉ๋๋ค.
2. ๊ธฐ๋ณธ์ ๊ณ์ฐ ์์
# Pick(5)๋ DefaultAmount ์์ด 5๋ฅผ ๋ฐํํฉ๋๋ค. Pick()๋ ํ ๋ฒ ํธ์ถํ์ฌ calls=1, ๊ฐ 7์ ๋ง๋ญ๋๋ค. Main์ 5*100+7*10+1, Integer 571์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Module Counter
Public Var calls = 0
End Module
Function DefaultAmount()
Counter.calls += 1
Return 7
End Function
Function Pick(Optional ByVal value = DefaultAmount())
Return value
End Function
Sub Main()
Var first = Pick(5)
Var second = Pick()
Return first * 100 + second * 10 + Counter.calls
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Pick(5)๋ DefaultAmount ์์ด 5๋ฅผ ๋ฐํํฉ๋๋ค. Pick()๋ ํ ๋ฒ ํธ์ถํ์ฌ calls=1, ๊ฐ 7์ ๋ง๋ญ๋๋ค. Main์ 5100+710+1, Integer 571์ ๋ฐํํฉ๋๋ค.
3. Optional, ByRef, As Integer
# value๋ 1๋ก ์์ํฉ๋๋ค. Increase(value)๋ amount=2๋ฅผ ๋ํด 3์ ์ ์ฅํ๊ณ Increase(value,4)๋ 4๋ฅผ ๋ํด 7์ ์ ์ฅํฉ๋๋ค. ๋ ๋งค๊ฐ๋ณ์๋ Integer์
๋๋ค. Main์ Integer 7์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub Increase(ByRef value As Integer, Optional ByVal amount As Integer = 2)
value += amount
End Sub
Sub Main()
Var value As Integer = 1
Increase(value)
Increase(value, 4)
Return value
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
value๋ 1๋ก ์์ํฉ๋๋ค. Increase(value)๋ amount=2๋ฅผ ๋ํด 3์ ์ ์ฅํ๊ณ Increase(value,4)๋ 4๋ฅผ ๋ํด 7์ ์ ์ฅํฉ๋๋ค. ๋ ๋งค๊ฐ๋ณ์๋ Integer์ ๋๋ค. Main์ Integer 7์ ๋ฐํํฉ๋๋ค.