- while 루프
코틀린에는 while
과 do-while
루프가 있다. 두 루프의 문법은 자바와 같다.
while (조건){
...
}
do{
...
}while (조건)
- 코틀린에서는 자바의 for 루프( 초깃값, 증가 값, 최종 값)를 대신하기 위해
range
를 사용한다. range
는 기본적으로 두 값으로 이뤄진 구간이며 양끝을 포함한다.
for (i in 1..5){
println(i)
}
for (i in 10 downTo 1 step 3){
println(i)
}
- 끝 값을 포함하지 않는
range
에 대해 이터레이션하기
for (i in 1 until 5){
println(i)
}
val binaryReps = TreeMap<Char, String>()
for (c in 'A'..'F') {
val binary = Integer.toBinaryString(c.code)
binaryReps[c] = binary
}
for((letter, binary) in binaryReps){
println("$letter = $binary")
}
val list = arrayListOf("10", "11", "1001")
for ((index, element) in list.withIndex()) {
println("$index: $element")
}
- in으로 컬렉션이나 range의 원소 검사
in
연산자를 사용해 어떤 값이 범위에 속하는지 검사할 수 있다.
!in
연산자를 사용해 어떤 값이 범위에 속하지 않는지 검사할 수 있다.
fun recognize(c: Char) = when (c) {
in '0'..'9' -> "숫자"
in 'a'..'z', in 'A'..'Z' -> "문자"
else -> "해당 없음"
}
- 비교가 가능한 클래스라면( java.lang.Comparable 인터페이스를 구현한 클래스라면 ) 그 클래스의 인스턴스 객체를 사용해 범위를 만들 수 있다. Comparable을 사용하는 범위의 경우 그 범위 내의 모든 객체를 항상 이터레이션하지는 못한다.
ex) "Java"와 "Kotlin" 사이의 모든 문자열을 이터레이션하는건 불가능하다.
하지만 in
연산자를 사용하면 값이 범위 안에 속하는지 항상 결정할 수 있다.
>>> println("Kotlin" in "Java".."Scala")
true
>>> println("Kotlin" in setOf("Java", "Scala"))
false