while 루프
while (조건) {
/*...*/
}
do {
/*...*/
} while (조건)
Kotlin
복사
for 루프
fun evenOrOdd(n: Int) = when {
n % 2 == 0 -> "even"
else -> "odd"
}
fun main() {
// 1 ~ 100까지(100 포함)
for (i in 1..100)
println(evenOrOdd(i))
// 100 ~ 1까지 (3 간격으로, 100,97~1)
for (i in 100 downTo 1 step 3)
println(evenOrOdd(i))
}
Kotlin
복사
•
기본적으로 i in 1..100 은 양쪽 끝 부분을 포함, 마지막을 미포함 하려면 until 키워드 사용
map과 iteration
val binaryReps = TreeMap<Char, String>()
for (c in 'A'..'Z') {
val binary = Integer.toBinaryString(c.code)
binaryReps[c] = binary
}
for ((key, value) in binaryReps) {
println("문자:$key, 아스키코드:$value")
}
Kotlin
복사
•
c in ‘A’..’Z’ : c는 ‘A’ 문자에서 ‘Z’문자까지 반복
•
(key, value) in binaryReps
◦
binaryReps라는 map 구조체에 담긴 값을 for-each 스타일로 하나씩 iteration
◦
map 구조체(key-value) 값을 좌측의 (key, value)로 구조분해(destructuring declaration)해서 바로 변수에 담음
in으로 범위 검사
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
fun recognize(c: Char) = when(c) {
in '0'..'9' -> "숫자"
in 'a'..'z', in 'A'..'Z' -> "알파벳"
else -> "숫자도 알파벳도 아님"
}
Kotlin
복사
•
a in s..t : 내부적으로 s ≤ a && a ≤ t 로 변환됨(양쪽 포함)