API Basic ByVal ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
ByVal
ClassicUO โข Basic
๋งค๊ฐ๋ณ์๋ SUB/FUNCTION์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ByRef๋ ๋ณ๊ฒฝ ๊ฐ์ ํธ์ถ์์๊ฒ ๊ธฐ๋กํ๊ณ ByVal์ ํธ์ถ์์ ๋ณ์๋ฅผ ๋ณด์กดํฉ๋๋ค. Optional์ ์๋ตํ ์ธ์๋ฅผ ๋ณด์ถฉํ๊ณ ParamArray๋ ๋๋จธ์ง ์ธ์๋ฅผ ๋ชจ์๋๋ค. ํธ์ถ ๋ช ๋ น์ด ์๋๋ผ ์ ์ธ ํ์ ์์ ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
Sub Change(ByVal value)
Function Increment(ByVal value)
Increment(expression)
๋งค๊ฐ๋ณ์
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. ์ค์นผ๋ผ ๋ณด์กด
# Change๋ amount=5์ ๋ณต์ฌ๋ณธ์ ๋ฐ์ต๋๋ค. ์ง์ญ ๊ฐ 99 ๋์
์ ์ธ๋ถ ๋ณ์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. Main์ Integer 5๋ฅผ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub Change(ByVal amount)
amount = 99
End Sub
Sub Main()
Var amount = 5
Change(amount)
Return amount
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Change๋ amount=5์ ๋ณต์ฌ๋ณธ์ ๋ฐ์ต๋๋ค. ์ง์ญ ๊ฐ 99 ๋์ ์ ์ธ๋ถ ๋ณ์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. Main์ Integer 5๋ฅผ ๋ฐํํฉ๋๋ค.
2. ๊ณต์ ๋ฐฐ์ด๊ณผ ์ง์ญ ReDim
# ByVal๋ ์์๋ฅผ ๊ณต์ ํ๋ฏ๋ก 9๊ฐ ๋ฉ๋๋ค. ReDim์ ๋ค๋ฅธ ์ง์ญ ๋ฐฐ์ด์ ๋ง๋ค๋ฉฐ 20์ ๊ทธ ๋ฐฐ์ด์๋ง ๊ธฐ๋ก๋ฉ๋๋ค. ์ธ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด 1, ๊ฐ 9๋ฅผ ์ ์งํฉ๋๋ค. Main์ Integer 91์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub Change(ByVal items)
items[0] = 9
ReDim items[1]
items[0] = 20
End Sub
Sub Main()
Dim items[0]
items[0] = 4
Change(items)
Return items[0] * 10 + GetArrayLength(items)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
ByVal๋ ์์๋ฅผ ๊ณต์ ํ๋ฏ๋ก 9๊ฐ ๋ฉ๋๋ค. ReDim์ ๋ค๋ฅธ ์ง์ญ ๋ฐฐ์ด์ ๋ง๋ค๋ฉฐ 20์ ๊ทธ ๋ฐฐ์ด์๋ง ๊ธฐ๋ก๋ฉ๋๋ค. ์ธ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด 1, ๊ฐ 9๋ฅผ ์ ์งํฉ๋๋ค. Main์ Integer 91์ ๋ฐํํฉ๋๋ค.
3. ์๊ณผ ๋ณ๋ ๊ฒฐ๊ณผ
# amount+3์ 7์
๋๋ค. Increment๊ฐ ์ง์ญ ๊ฐ์ 8๋ก ๋ฐ๊พธ๊ณ ๋ฐํํฉ๋๋ค. ์ธ๋ถ amount๋ 4์
๋๋ค. Main์ 4*10+8, Integer 48์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function Increment(ByVal value)
value += 1
Return value
End Function
Sub Main()
Var amount = 4
Var result = Increment(amount + 3)
Return amount * 10 + result
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
amount+3์ 7์ ๋๋ค. Increment๊ฐ ์ง์ญ ๊ฐ์ 8๋ก ๋ฐ๊พธ๊ณ ๋ฐํํฉ๋๋ค. ์ธ๋ถ amount๋ 4์ ๋๋ค. Main์ 4*10+8, Integer 48์ ๋ฐํํฉ๋๋ค.