์ฝํ๋ฆฐ์์๋ ์ฝ๋ ํ๋ฆ๊ณผ ๊ด๋ จ๋ ํํ์์ด ์๋ค.
return: ๊ฐ์ ๋ฐํํ๊ณ ํจ์๋ฅผ ์ข
๋ฃ
break: ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃ
continue: ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ๋ณต๋ฌธ์ ๋ค์ ๋จ๊ณ ์งํ
๊ทธ๋ฆฌ๊ณ ์ฝํ๋ฆฐ์๋ c์ goto ๊ฐ์ ๊ฒ์ด ์๋ค.
loop@ for (i in 0..2) {
if(...) break@loop
}
๋คํํ c์ goto์ ๋ฌ๋ฆฌ ๋ฐ๋ณต๋ฌธ์๋ง ์ฌ์ฉํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก goto๋ ์ฝ๋ ์คํ ํ๋ฆ์ด ๊ผฌ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
์ ์ผํ๊ฒ ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณผ ๋ถ๋ถ์ ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ ๋๋ค.
์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋ ค๋ฉด ์กฐ๊ฑด๋ฌธ์ 2๊ฐ๋ฅผ ๋ง๋๋ ๊ฒ ์ผ๋ฐ์ ์ด๋ค.
ํ์ง๋ง goto๋ label์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค.
loop1@ for(i in 0..10) {
loop2@ for(j in 0..10) {
if (j == 5) break@loop1
println("i: $i, j: $j")
}
}
label์ return์๋ ์ฌ์ฉํ ์ ์๋ค.
(0..10).forEach {
if (it == 5) return@forEach
println(it)
}
๋ฐ๋ณต๋ฌธ์ฒ๋ผ ๋ณด์ด๋๋ฐ break๊ฐ ์๋๋ผ return์ ์ฌ์ฉํ๋ ์ด์ ๋ forEach๋ผ ๊ทธ๋ ๋ค.
forEach๊ฐ ์ต๋ช
ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ๋ฐ๋ณต๋ฌธ์ ์คํํ๊ธฐ ๋๋ฌธ์ return์ผ๋ก ํจ์๋ฅผ ์ข
๋ฃํด์ผ ํ๋ค.
forEach๋ ์๋์ผ๋ก label์ด ์๊ธฐ ๋๋ฌธ์ main ํจ์๊ฐ ๊ฐ์ด ์ข
๋ฃ๋์ง ์๋๋ค.
๊ฐ์ ๋ฐํํ๋ ๊ฒฝ์ฐ ๋ค์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
return@a 1