API Basic While ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
While / Wend / Exit While / Break
ClassicUO โข Basic
While๋ ๋งค ๋ฐ๋ณต ์ ์ ์กฐ๊ฑด์ ๊ฒ์ฌํ๊ณ ์ฐธ์ธ ๋์ ๋ณธ๋ฌธ์ ๋ฐ๋ณตํฉ๋๋ค. ์ด ์์ง์ Wend๋ก ๋ซ์ผ๋ฉฐ VB.NET์ End While ํ๊ธฐ๋ ์ง์ํ์ง ์์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
While condition
statements
Wend
Continue While
Exit While
Break
๋งค๊ฐ๋ณ์
conditionโ ์ฒซ ๊ฒ์ฌ์ ๋ง์ง๋ง ๊ฒ์ฌ๋ฅผ ํฌํจํด ๋งค๋ฒ ๋ค์ ํ๊ฐํ๋ ์์ ๋๋ค. ๋น๊ต๋ ์ซ์ Boolean์ ์ฌ์ฉํ์ธ์. 0/False๋ ์ข ๋ฃ, 1/True ๋ฐ ๋ค๋ฅธ 0์ด ์๋ ์ซ์๋ ๊ณ์ํฉ๋๋ค. ํ ์คํธ๋ฅผ Boolean์ผ๋ก ํด์ํ์ง ์์ต๋๋ค.statementsโ ์์ ์ ์ํํ๊ณ ์กฐ๊ฑด์ ์งํ์ํค๋ ๋ณธ๋ฌธ ๋ช ๋ น์ ๋๋ค. ์ฒซ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด๋ฉด ๋ณธ๋ฌธ ์ ์ฒด๋ฅผ ๊ฑด๋๋๋๋ค.Wend / exitโ Wend๋ ์กฐ๊ฑด์ผ๋ก ๋์๊ฐ๋๋ค. Continue While๋ ๋ค์ ๊ฒ์ฌํ๊ณ Exit While๋ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ ๋์ด ๊ฐ์ฅ ๊ฐ๊น์ด While๋ฅผ ๋๋ ๋๋ค. Break๋ ์ข ๋ฅ์ ๊ด๊ณ์์ด ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๋ณต๋ฌธ์ ๋๋ ๋๋ค.
๋ฐํ๊ฐ
While, Wend, Exit While, Break๋ ๋ฐํ๊ฐ์ด ์์ต๋๋ค. ๋ณธ๋ฌธ์ RETURN์ ํ๋ก์์ /ํจ์ ์ ์ฒด๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์์ ๋ Integer 6,1,406์ ๋ฐํํฉ๋๋ค. ๊ฒ์ ๊ฒฐ๊ณผ 1์ ๋ฐฐ์ด ์ธ๋ฑ์ค์ด์ง ์ฑ๊ณต Boolean์ด ์๋๋๋ค.
๋์
- ๊ฒ์ฌ, ๋ณธ๋ฌธ ์คํ, ๊ฒ์ฌ๋ก ๋ณต๊ทํ๋ ์์์ ๋๋ค. ์ซ์ ๊ฒฝ๊ณ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์นด์ดํฐ๋ฅผ ์๋ ์ฆ๊ฐ์ํค์ง ์์ต๋๋ค.
- ์งํ์ ๋ช ์์ ์ผ๋ก ์์ฑํ์ธ์. ๊ฒ์ ์ํ๋ฅผ ๋ฐ๋ณต ์กฐํํ ๋ ์ ์ ํ Wait์ ๊ธฐํ์ ์ถ๊ฐํ์ธ์. While ์์ฒด๋ ๋๊ธฐํ๊ฑฐ๋ ์๊ฐ ์ด๊ณผ๋์ง ์์ต๋๋ค. ์ผ์ ์ค์ง์ ์ ์ง๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Continue๋ ์ข ๋ฃ๋ก ๋ ๋๋ Try์ Finally๋ ์คํ๋ฉ๋๋ค. ํค๋, ๋ช ๋ น, Wend๋ ํ๋ก์์ ๋ ํจ์ ์์์ ๊ฐ๊ฐ ๋ณ๋ ์ค๋ก ์์ฑํฉ๋๋ค.
์์
1. ์๋ฆฟ์ ํฉ๊ณ
# DigitSum์ number=123์ ByVal๋ก ๋ฐ์ต๋๋ค. MOD 10์ผ๋ก ๋ง์ง๋ง ์๋ฆฌ๋ฅผ ์ฝ๊ณ Fix(number/10)์ผ๋ก ์ ๊ฑฐํฉ๋๋ค: 123โ12โ1โ0. total=3+2+1=6์ด๋ฉฐ ๋ง์ง๋ง ๊ฑฐ์ง ์กฐ๊ฑด์ผ๋ก ๋๋ Main์ด 6์ ๋ฐ์ต๋๋ค. ์
๋ ฅ 0์ด๋ฉด ๋ณธ๋ฌธ ์์ด 0์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function DigitSum(ByVal number)
Var total = 0
While number > 0
total += number MOD 10
number = Fix(number / 10)
Wend
Return total
End Function
Sub Main()
Return DigitSum(123)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
DigitSum์ number=123์ ByVal๋ก ๋ฐ์ต๋๋ค. MOD 10์ผ๋ก ๋ง์ง๋ง ์๋ฆฌ๋ฅผ ์ฝ๊ณ Fix(number/10)์ผ๋ก ์ ๊ฑฐํฉ๋๋ค: 123โ12โ1โ0. total=3+2+1=6์ด๋ฉฐ ๋ง์ง๋ง ๊ฑฐ์ง ์กฐ๊ฑด์ผ๋ก ๋๋ Main์ด 6์ ๋ฐ์ต๋๋ค. ์ ๋ ฅ 0์ด๋ฉด ๋ณธ๋ฌธ ์์ด 0์ ๋ฐํํฉ๋๋ค.
2. ์ฒซ ์ผ์น ์ฐพ๊ธฐ
# FirstAbove๋ values=[4,7,9], threshold=6์ ๋ฐ์ต๋๋ค. ๊ธธ์ด ๊ฒ์ฌ๊ฐ values[index]๋ฅผ ๋ณดํธํฉ๋๋ค. index=1์์ 7>6์ด๋ฏ๋ก found=1์ ์ ์ฅํ๊ณ Exit While๋ก ๋๋
๋๋ค. ์ผ์น๊ฐ ์์ผ๋ฉด -1์ด๋ฉฐ Main์ 0๋ถํฐ ์ธ๋ ์ธ๋ฑ์ค 1์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function FirstAbove(ByVal values, ByVal threshold)
Var index = 0
Var found = -1
While index < GetArrayLength(values)
If values[index] > threshold Then
found = index
Exit While
End If
index += 1
Wend
Return found
End Function
Sub Main()
Dim values[2]
values[0] = 4
values[1] = 7
values[2] = 9
Return FirstAbove(values, 6)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
FirstAbove๋ values=[4,7,9], threshold=6์ ๋ฐ์ต๋๋ค. ๊ธธ์ด ๊ฒ์ฌ๊ฐ values[index]๋ฅผ ๋ณดํธํฉ๋๋ค. index=1์์ 7>6์ด๋ฏ๋ก found=1์ ์ ์ฅํ๊ณ Exit While๋ก ๋๋ ๋๋ค. ์ผ์น๊ฐ ์์ผ๋ฉด -1์ด๋ฉฐ Main์ 0๋ถํฐ ์ธ๋ ์ธ๋ฑ์ค 1์ ๋ฐํํฉ๋๋ค.
3. ์กฐ๊ฑด ๊ฒ์ฌ ํ์
# CanContinue๋ checks๋ฅผ ByRef, index์ limit=3์ ByVal๋ก ๋ฐ์ต๋๋ค. checks๋ฅผ ๋๋ฆฐ ํ index<limit๋ฅผ 1/0์ผ๋ก ๋ฐํํฉ๋๋ค. index=0,1,2,3์์ ๊ฒ์ฌํ๋ฏ๋ก ์ธ ๋ฐ๋ณต์ ๋ค ํธ์ถ์
๋๋ค. total=6์ด๋ฉฐ Main์ 406์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function CanContinue(ByRef checks, ByVal index, ByVal limit)
checks += 1
Return index < limit
End Function
Sub Main()
Var checks = 0
Var index = 0
Var total = 0
While CanContinue(checks, index, 3)
index += 1
total += index
Wend
Return checks * 100 + total
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
CanContinue๋ checks๋ฅผ ByRef, index์ limit=3์ ByVal๋ก ๋ฐ์ต๋๋ค. checks๋ฅผ ๋๋ฆฐ ํ index<limit๋ฅผ 1/0์ผ๋ก ๋ฐํํฉ๋๋ค. index=0,1,2,3์์ ๊ฒ์ฌํ๋ฏ๋ก ์ธ ๋ฐ๋ณต์ ๋ค ํธ์ถ์ ๋๋ค. total=6์ด๋ฉฐ Main์ 406์ ๋ฐํํฉ๋๋ค.