티스토리 뷰
728x90
for
- for 루프의 경우 iterator를 제공하는 모든것을 반복할 수 있음.
val intList = (1..10).toMutableList()
// print 1 ~ 10
for (i in intList) { print(i) }
- iterator를 사용하지 않고 index기반으로 for 루프를 사용할 수 있음.
val intList = (1..5).toMutableList()
for (i in intList.indices) { println("index: $i, value: ${intList[i]}") }
- withIndex로 index와 value를 한번에 사용할수 있음.
val intList = (1..5).toMutableList()
for ((index, value) in intList.withIndex()) { println("index: $index, value: $value") }
while, do ~ while
- 기존 문법과 동일 하므로 설명하지 않음.
return, break, continue, label
- 코틀린에서는 세가지 점프 연산자를 제공한다.
연산자 | 사용법 |
return | 가장 가깝게 둘러 싼 함수나 임의 함수에서 리턴한다. |
break | 가장 가깝게 둘러 싼 루프를 끝낸다. |
continue | 가장 가깝게 둘러 싼 루프의 다음 반복문으로 넘어간다. |
break, continue 라벨
- break, continue에 라벨지정시 끝내거나 다음 반복문으로 넘어갈 반복문을 지정할 수 있다.
for (i in intList) {
for (k in intList) {
if (k == 2) break
println("inner for k :: $k")
}
println("outer for i :: $i")
}
// inner for k :: 1
// outer for i :: 1
// inner for k :: 1
// outer for i :: 2
// inner for k :: 1
// outer for i :: 3
outerLoop@ for (i in intList) {
for (k in intList) {
if (k == 2) break@outerLoop // 바깥 루프 빠져나감
println("inner for k :: $k")
}
println("outer for i :: $i")
}
// inner for k :: 1
return 라벨
- return 식은 가장 가깝게 둘러싼 함수에서 return한다.
- 만약 람다 식에서 리턴하고 싶다면 라벨을 붙여서 return을 한정해야 한다.
val intList = (1..3).toMutableList()
fun foo () {
intList.forEach {
if (it == 2) return
print(it)
}
println("end of foo function")
}
foo()
// 1
- 위의 예에서 forEach 람다 안에서 return시 가장 가까운 foo함수를 빠져나간다.
- 만약 foo가 아닌 forEach를 빠져나가고 싶다면 라벨을 붙인다.
val intList = (1..3).toMutableList()
fun foo () {
intList.forEach limit@ {
if (it == 2) return@limit
print(it)
}
println()
println("end of foo function")
}
foo()
// 1
// 3
// end of foo function
결과 위에 내가 생각했던 결과는 다음과 같다.
1 -> end of foo function
그런데 실제 결과는 다음과 같다.
1 -> 3 -> end of foo function
내가 의도 했던바는 return@limit시 forEach를 빠져나간 후 다음 로직을 타는 거였는데
실제 코틀린에서는 조건에 부합하는 부분만 forEach에서 제외하고 모두 실행된다.
이부분 조심해서 사용해야 되겠다.
- 모든 라벨을 정의하지 않고 임의의 라벨을 사용할 수 있다.
- 임의 라벨은 전달 받은 함수와 같은 이름으로 사용한다.
...
fun foo () {
intList.forEach {
if (it == 2) return@forEach
print(it)
}
...
}
// 결과값은 상위와 같음.
참조
http://codesunsoo.blogspot.com/2016/04/kotlin-programming-langauage.html
https://javacan.tistory.com/entry/kotlin-11-12-ko-reference
728x90
'개발 언어 > 코틀린' 카테고리의 다른 글
코틀린(Kotlin) | 클래스 - 객체지향 (0) | 2019.06.21 |
---|---|
코틀린(Kotlin) | 타입 시스템 (0) | 2019.06.21 |
코틀린(Kotlin) | 범위 표현식 (0) | 2019.06.21 |
코틀린(Kotlin) | 분기문 (if, when) (0) | 2019.06.21 |
코틀린(Kotlin) | 동등성 vs 동일성 (0) | 2019.06.21 |
댓글