API Basic CompoundAssignment ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
+= / -= / *= / /= / &=
ClassicUO โข Basic
+=, -=, *=, /=๋ก ๊ธฐ์กด ๋ณ์๋ ๋ฐฐ์ด ์์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. ํ์ฌ ๊ฐ์ ์ฝ๊ณ ๊ณ์ฐํ์ฌ ๋ค์ ์ฐ๋ฉฐ ๋์์ ๋ ๋ฒ ํ๊ฐํ์ง ์์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
target += value
target -= value
target *= value
target /= value
target &= value
๋งค๊ฐ๋ณ์
targetโ target: ๊ธฐ์กด ์ค์นผ๋ผ ์ด๋ฆ ๋๋ items[index], grid[x][y] ๊ฐ์ ์์์ ๋๋ค. ์์๋ ์ด๊ธฐํ๋์ด์ผ ํ๋ฉฐ 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๊ฐ ์ ํจํด์ผ ํฉ๋๋ค. ๋ณ์๋ฅผ ์ ์ธํ์ง ์์ต๋๋ค.operatorโ +=์ &=๋ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ ๋ String์ ์ฐ๊ฒฐํ๋ฉฐ -=๋ ๋นผ๊ธฐ, *=๋ ๊ณฑํ๊ธฐ, /=๋ ๋๋๊ธฐ์ ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ &=๋ฅผ +=๋ก ๋ฐ๊พธ๋ฏ๋ก 5 &= 3์ 8์ ์ ์ฅํฉ๋๋ค. String๊ณผ ์ซ์์๋ ๋ช ์์ ์ธ CStr์ด ํ์ํฉ๋๋ค. ์ฐ์ฐ์๋ฅผ ํ๋์ ํ ํฐ์ผ๋ก ์ฐ์ธ์.valueโ value: ๋์๊ณผ ์ธ๋ฑ์ค ๋ค์ ํ ๋ฒ ๊ณ์ฐํ ์์ ๋๋ค. ์ข ๋ฅ๊ฐ ์ฐ์ฐ์ ๋ง์์ผ ํฉ๋๋ค. ์ซ์๋ฅผ String์ ์ถ๊ฐํ๊ธฐ ์ ์ CStr๋ก ๋ณํํ์ธ์.
๋ฐํ๊ฐ
๊ฐ ์์(Unit)์ ๋๋ค. ๋ฌธ์ด๋ฉฐ ์์ด๋ ์ฑ๊ณต ํ๋๊ทธ๊ฐ ์๋๋๋ค. ๋ค์ ์ค์์ target์ ์ฝ์ด ์ ์ฅ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ์ธ์. ์ค์นผ๋ผ ์ฐ๊ธฐ์๋ AS๊ฐ ์ ์ฉ๋์ด Integer 5๋ฅผ /=2 ํ๋ฉด Integer 2, ํ์ ๋ฏธ์ง์ ์ซ์ ๋ณ์๋ Decimal 2.5๊ฐ ๋ฉ๋๋ค.
๋์
- ๊ฐ ๋ฐฐ์ด ์ฐธ์กฐ๋ฅผ ์ธ๋ฑ์ค ๊ณ์ฐ ์ ์ ๋ณด๊ดํฉ๋๋ค. ์ธ๋ฑ์ค๋ ์ผ์ชฝ๋ถํฐ ํ ๋ฒ์ฉ ์คํํ๊ณ ๋ฒ์๋ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์ ์ ์ ํ์ธํฉ๋๋ค. ์ธ๋ฑ์ค๋ ์ค๋ฅธ์ชฝ ByRef ํจ์๊ฐ ๋ฐฐ์ด ๋ณ์๋ ๋ถ๋ชจ ์์๋ฅผ ๊ต์ฒดํด๋ ์ด๋ฏธ ์ ํํ ์นธ์ ์๋๋ค.
- +, -, *, /์ ๊ฐ์ ๊ท์น์ ๋๋ค. ์ ์๋ ๋ถํธ ์๋ 32๋นํธ๋ก ์ค๋ฒํ๋กํ๊ณ /๋ Decimal์ด๋ฉฐ ๋ถ๋์์์ 0 ๋๋์ ์ Infinity/NaN์ผ ์ ์์ต๋๋ค. String๊ณผ ์ซ์ ๋ง์ ์ ์คํจํฉ๋๋ค. ๋ฐฐ์ด ์์์๋ ์ค์นผ๋ผ AS ๋ณํ์ด ์์ต๋๋ค.
- ๋ฏธ์ ์ธ ๋์, ๋ฏธ์ด๊ธฐํ ์์, ์๋ชป๋ ์ธ๋ฑ์ค, ํธํ๋์ง ์๋ ์ฐ์ฐ, CONST ์ฐ๊ธฐ, ๋ณํ ์คํจ๋ ์ก์ ์ ์๋ ์ค๋ฅ์ ๋๋ค. ์ต์ข ์ฐ๊ธฐ๋ ํ์ง ์์ง๋ง ํผ์ฐ์ฐ์ ํจ์๊ฐ ์ด๋ฏธ ์ผ์ผํจ ๋ถ์ ํจ๊ณผ๋ ๋๋๋ฆฌ์ง ์์ต๋๋ค. CONST์ AS๋ ์ค๋ฅธ์ชฝ์ด ์คํ๋ ํ ์ค์นผ๋ผ๋ฅผ ์ธ ๋ ๊ฒ์ฌํฉ๋๋ค.
- Option Explicit์ ์คํ ์ ์ ์ด๋ฆ์ ํ์ธํฉ๋๋ค. ๋๋ฒ๊ฑฐ๋ ์๋ณธ ์ค ๋ฒํธ๋ฅผ ์ฐ๊ณ ๋ฐ์ ๋ฃจํ๋ ์ผ์ ์ ์ง์ ์ ์ง ๊ฒ์ฌ๋ฅผ ์ ์งํฉ๋๋ค. ์ฝ๊ธฐ, ๊ณ์ฐ, ์ฐ๊ธฐ๋ ๋์ ํ๋ก์์ ์ฌ์ด์ ์์์ ๋๊ธฐํ ์ฐ์ฐ์ด ์๋๋๋ค.
์์
1. ๋ค ๊ฐ์ง ์ฐ์ฐ
# amount๋ 10์์ ์์ํฉ๋๋ค. +=2๋ 12, -=3์ 9, *=4๋ 36, /=2๋ Decimal 18์
๋๋ค. Main์ ์ ์ฅ๊ฐ์ ๋ฐํํ๋ฉฐ ๋์
๋ฌธ ์์ฒด๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค.
Option Explicit On
SUB Main()
VAR amount = 10
amount += 2
amount -= 3
amount *= 4
amount /= 2
RETURN amount
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
amount๋ 10์์ ์์ํฉ๋๋ค. +=2๋ 12, -=3์ 9, *=4๋ 36, /=2๋ Decimal 18์ ๋๋ค. Main์ ์ ์ฅ๊ฐ์ ๋ฐํํ๋ฉฐ ๋์ ๋ฌธ ์์ฒด๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค.
2. ์ธ๋ฑ์ค๋ฅผ ํ ๋ฒ ๊ณ์ฐ
# NextIndex๋ ByRef ๋งค๊ฐ๋ณ์ calls๋ฅผ ์ฆ๊ฐ์ํค๊ณ 0์ ๋ฐํํฉ๋๋ค. items[0]์ 5์์ +=2๋ก 7์ด ๋ฉ๋๋ค. ํธ์ถ์ ํ ๋ฒ์ด๋ฏ๋ก calls=1์
๋๋ค. Main์ items[0]*10+calls=71์ ๋ฐํํฉ๋๋ค. ๋ณด์กฐ ํจ์ ์ ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค.
Option Explicit On
FUNCTION NextIndex(ByRef calls)
calls += 1
RETURN 0
END FUNCTION
SUB Main()
DIM items[0]
items[0] = 5
VAR calls = 0
items[NextIndex(calls)] += 2
RETURN items[0] * 10 + calls
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
NextIndex๋ ByRef ๋งค๊ฐ๋ณ์ calls๋ฅผ ์ฆ๊ฐ์ํค๊ณ 0์ ๋ฐํํฉ๋๋ค. items[0]์ 5์์ +=2๋ก 7์ด ๋ฉ๋๋ค. ํธ์ถ์ ํ ๋ฒ์ด๋ฏ๋ก calls=1์ ๋๋ค. Main์ items[0]*10+calls=71์ ๋ฐํํฉ๋๋ค. ๋ณด์กฐ ํจ์ ์ ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค.
3. ์์ ๋ณดํธ ์ฒ๋ฆฌ
# limit๋ CONST 5์
๋๋ค. limit+=1์ ์ธ ๋ ์ค๋ฅ๊ฐ ๋๊ณ CATCH๋ problem์ ์ ์ฅํ๋ฉฐ caught=TRUE๋ก ๋ง๋ญ๋๋ค. limit๋ 5๋ฅผ ์ ์งํฉ๋๋ค. Main์ ๋ช
์์ CStr๋ก "5:1"์ ๋ฐํํฉ๋๋ค. ํ๋๊ทธ๋ ์ค๋ฅ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ด์ง ๋์
๋ฐํ๊ฐ์ด ์๋๋๋ค. ๋ณ์์์ ๋ฌธ์์ด์ ๋ง๋ญ๋๋ค. report=CStr(limit) ๋ค์ report &= ":"์ report &= CStr(caught)๋ฅผ ์คํํฉ๋๋ค. ๊ฐ &=๋ report๋ฅผ ๊ฐฑ์ ํ๊ณ Return report๋ "5:1"์ ๋ฐํํฉ๋๋ค.
Option Explicit On
SUB Main()
CONST limit = 5
VAR caught = FALSE
TRY
limit += 1
CATCH problem
caught = TRUE
END TRY
VAR report = CStr(limit)
report &= ":"
report &= CStr(caught)
RETURN report
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
limit๋ CONST 5์ ๋๋ค. limit+=1์ ์ธ ๋ ์ค๋ฅ๊ฐ ๋๊ณ CATCH๋ problem์ ์ ์ฅํ๋ฉฐ caught=TRUE๋ก ๋ง๋ญ๋๋ค. limit๋ 5๋ฅผ ์ ์งํฉ๋๋ค. Main์ ๋ช ์์ CStr๋ก "5:1"์ ๋ฐํํฉ๋๋ค. ํ๋๊ทธ๋ ์ค๋ฅ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ด์ง ๋์ ๋ฐํ๊ฐ์ด ์๋๋๋ค. ๋ณ์์์ ๋ฌธ์์ด์ ๋ง๋ญ๋๋ค. report=CStr(limit) ๋ค์ report &= ":"์ report &= CStr(caught)๋ฅผ ์คํํฉ๋๋ค. ๊ฐ &=๋ report๋ฅผ ๊ฐฑ์ ํ๊ณ Return report๋ "5:1"์ ๋ฐํํฉ๋๋ค.