API Basic ForEach ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
For Each / Next
ClassicUO โข Basic
For Each๋ ์ซ์ ์ธ๋ฑ์ค ์์ด ๋ฐฐ์ด์ด๋ ์ด๊ฑฐ ๊ฐ๋ฅํ ๋ค์ดํฐ๋ธ ์ปฌ๋ ์ ์ ์์๋ฅผ ์์๋๋ก ์ฝ์ต๋๋ค. ํ๋ก์์ ๋ ํจ์ ์์ ๋ฐ๋ณต๋ฌธ์ด๋ฉฐ API ํจ์ ํธ์ถ์ด ์๋๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
For Each item [AS type] In collection
statements
Next [item]
๋งค๊ฐ๋ณ์
itemโ item: ๋ฐ๋ณต ๋ณ์์ ๋๋ค. ๊ธฐ์กด ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์ ๋๋ ์ ๊ทผ ๊ฐ๋ฅํ ํ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ฉฐ ์์ผ๋ฉด Option Explicit On์์๋ ์ง์ญ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. ์์์๋ ์ธ ์ ์์ต๋๋ค.typeโ type: ์ ํ์ ์ธ AS type์ผ๋ก Integer ๋ฑ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ง์ญ ๋ฐ๋ณต ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์์๋ง๋ค ๋ณํํฉ๋๋ค. AS๊ฐ ์์ผ๋ฉด ๊ธฐ์กด ๋ณ์์ ํ์์ ์ ์งํฉ๋๋ค.collectionโ collection: ์ง์ ํ ๋ ํ ๋ฒ ํ๊ฐํ๋ ์์ ๋๋ค. ๋ฐฐ์ด ๋๋ ์ด๊ฑฐ ๊ฐ๋ฅํ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฅผ ๋ฐ์ผ๋ฉฐ ์ค์นผ๋ผ๋ ์ค๋ฅ์ ๋๋ค. ์ค์ฒฉ ๋ฐฐ์ด์ ๋จผ์ ํ์ ๋ฐํํ๋ฏ๋ก ์ ์๋ ์์ชฝ ๋ฐ๋ณต๋ฌธ์ ์๋๋ค.statements / NEXT itemโ statements / NEXT item: ๋ณธ๋ฌธ๊ณผ ๋์ ๋๋ค. NEXT ๋ค ์ด๋ฆ์ ์๋ตํ ์ ์์ง๋ง ์ฐ๋ฉด ๋ฐ๋ณต ๋ณ์์ ๊ฐ์์ผ ํฉ๋๋ค. NEXT๋ ๋ณ๋ ์ค์ ์๋๋ค.
๋ฐํ๊ฐ
For Each์ Next๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. item์ ์์ ๊ฐ์ ๋ฐ์ผ๋ฉฐ ์๋์ผ๋ก ์ธ๋ฑ์ค, ID, ๋ฌถ์ ์๋์ ๋ฐ๋ ๊ฒ์ด ์๋๋๋ค. ๋ณธ๋ฌธ์ RETURN์ ํจ์ ์ ์ฒด๋ฅผ ๋๋ ๋๋ค. ์์ ๋ Integer 12, 105, 10์ ๋ฐํํฉ๋๋ค.
๋์
- ์ค๋น ๋จ๊ณ์์ ์ด๊ธฐํ ์ ์ FOR EACH์ NEXT๋ฅผ ์ฐ๊ฒฐํ๋ฉฐ ์๋ชป๋ ์ฐ๊ฒฐ์ SC020์ ๋๋ค. collection์ ํ ๋ฒ ํ๊ฐํ ๋ค ์ฐธ์กฐ์ ๋ณ๋ ์ปค์๋ฅผ ์ ์ฅํฉ๋๋ค. item์ ๋ณ๊ฒฝํด๋ ์ปค์๋ ์์ง์ด์ง ์์ต๋๋ค.
- ๋ฐฐ์ด์ ์ธ๋ฑ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ฝ์ต๋๋ค. ๋น ๋ฐฐ์ด์ ๋ณธ๋ฌธ์ ๊ฑด๋๋ฐ๊ณ AS ์๋ ๊ธฐ์กด ๋ณ์ ๊ฐ์ ์ ์งํฉ๋๋ค. ์ด๊ธฐํ๋์ง ์์ ์์๋ AS ๋ณํ ์คํจ๋ ์ก์ ์ ์๋ ์ค๋ฅ์ ๋๋ค.
- item ๋์ ์ ๋ฐฐ์ด ์์๋ฅผ ๊ต์ฒดํ์ง ์์ต๋๋ค. ์ค์ฒฉ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ ์ฐธ์กฐ์ด๋ฏ๋ก row ์ ์์ ์ ํด๋น ํ์ ๋ฐ๊ฟ๋๋ค. collection ์ฌ๋์ ์ ํ์ฌ ์ด๊ฑฐ ๋์์ ๋ฐ๊พธ์ง ์์ผ๋ฉฐ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ ์์ ์์ ์ ์ฝ์ ๋ ๋ฐ์๋ฉ๋๋ค.
- Continue For๋ ๊ฐ์ฅ ๊ฐ๊น์ด For ๋๋ For Each์ ๋ค์ ๋ฐ๋ณต์ผ๋ก, Exit For๋ ๊ทธ ๋ฐ์ผ๋ก ์ด๋ํฉ๋๋ค. ์ค๋ฅ, RETURN, ์ทจ์๋ ๋ค์ดํฐ๋ธ ์ด๊ฑฐ์๋ฅผ ํด์ ํฉ๋๋ค. ์ปฌ๋ ์ ์ด ์ด๊ฑฐ ์ค ์์ ์ ๊ธ์งํ ์ ์์ผ๋ฉฐ ์๋ ๋ณต์ฌ๋ณธ์ ์์ต๋๋ค.
- ๋ฐ๋ณต ๋ณ์๋ ์ข ๋ฃ ํ์๋ ํ๋ก์์ ์์์ ๋ง์ง๋ง ๊ฐ์ ์ ์งํฉ๋๋ค. ๊ฐ ์คํ์ ๋ ๋ฆฝ๋ ์ปค์๋ฅผ ๊ฐ์ง๋๋ค. IDE ์ด๋ฆ ์์ฑ, ๋ฐ๋ณต๋ฌธ ํ ํ๋ฆฟ, ์ ์ธ ์ด๋๊ณผ ์ผ์ ์ ์งยท์ค์ง๊ฐ ์ง์๋ฉ๋๋ค.
์์
1. ์ธ๋ฑ์ค ์๋ ํฉ๊ณ
# values[2]์๋ 2, 4, 6 ์ธ ์์๊ฐ ์์ต๋๋ค. SumItems๋ ๋ฐฐ์ด์ ๋ฐ๊ณ item์ ๊ฐ ์ซ์๋ฅผ ๋ฐ์ต๋๋ค. total์ 0์์ 12๊ฐ ๋๋ฉฐ RETURN์ Integer 12๋ฅผ Main์ ์ ๋ฌํฉ๋๋ค. NEXT item์ ํด๋น ๋ฐ๋ณต์ ๋ซ์ต๋๋ค.
Option Explicit On
Function SumItems(values)
Var total = 0
For Each item In values
total += item
Next item
Return total
End Function
Sub Main()
Dim values[2]
values[0] = 2
values[1] = 4
values[2] = 6
Return SumItems(values)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
values[2]์๋ 2, 4, 6 ์ธ ์์๊ฐ ์์ต๋๋ค. SumItems๋ ๋ฐฐ์ด์ ๋ฐ๊ณ item์ ๊ฐ ์ซ์๋ฅผ ๋ฐ์ต๋๋ค. total์ 0์์ 12๊ฐ ๋๋ฉฐ RETURN์ Integer 12๋ฅผ Main์ ์ ๋ฌํฉ๋๋ค. NEXT item์ ํด๋น ๋ฐ๋ณต์ ๋ซ์ต๋๋ค.
2. ํ ๋ฒ ํ๊ฐํ๊ณ ๋ณํ
# SelectItems๋ calls๋ฅผ ByRef๋ก ๋ฐ์ 1๋ก ๋๋ฆฌ๊ณ ["2", "3"]์ ๋ฐํํฉ๋๋ค. AS Integer๊ฐ 2, 3์ผ๋ก ๋ณํํ์ฌ total=5์
๋๋ค. item=100์ ์๋ณธ์ด๋ ์์๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. Main์ calls*100+total์ธ Integer 105๋ฅผ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function SelectItems(ByRef calls)
calls += 1
Dim values[1]
values[0] = "2"
values[1] = "3"
Return values
End Function
Sub Main()
Var calls = 0
Var total = 0
For Each item As Integer In SelectItems(calls)
total += item
item = 100
Next
Return calls * 100 + total
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
SelectItems๋ calls๋ฅผ ByRef๋ก ๋ฐ์ 1๋ก ๋๋ฆฌ๊ณ ["2", "3"]์ ๋ฐํํฉ๋๋ค. AS Integer๊ฐ 2, 3์ผ๋ก ๋ณํํ์ฌ total=5์ ๋๋ค. item=100์ ์๋ณธ์ด๋ ์์๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. Main์ calls*100+total์ธ Integer 105๋ฅผ ๋ฐํํฉ๋๋ค.
3. ์ค์ฒฉ ๋ฐฐ์ด
# rows[1][1]์ ๋ ํ์ ๊ฐ๊ฐ ๋ ์
์ด ์์ต๋๋ค. row๋ ํ ์ฐธ์กฐ, cell์ 1, 2, 3, 4๋ฅผ ๋ฐ์ต๋๋ค. ๊ฐ NEXT๊ฐ ์๊ธฐ ๋ฐ๋ณต๋ฌธ์ ๋ซ์ต๋๋ค. SumGrid์ Main์ Integer 10์ ๋ฐํํ๋ฉฐ ID๋ ์๋์ ์๋ ์ถ๋ก ํ์ง ์์ต๋๋ค.
Option Explicit On
Function SumGrid(rows)
Var total = 0
For Each row In rows
For Each cell In row
total += cell
Next cell
Next row
Return total
End Function
Sub Main()
Dim rows[1][1]
rows[0][0] = 1
rows[0][1] = 2
rows[1][0] = 3
rows[1][1] = 4
Return SumGrid(rows)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
rows[1][1]์ ๋ ํ์ ๊ฐ๊ฐ ๋ ์ ์ด ์์ต๋๋ค. row๋ ํ ์ฐธ์กฐ, cell์ 1, 2, 3, 4๋ฅผ ๋ฐ์ต๋๋ค. ๊ฐ NEXT๊ฐ ์๊ธฐ ๋ฐ๋ณต๋ฌธ์ ๋ซ์ต๋๋ค. SumGrid์ Main์ Integer 10์ ๋ฐํํ๋ฉฐ ID๋ ์๋์ ์๋ ์ถ๋ก ํ์ง ์์ต๋๋ค.