프로그래밍 노트/Kotlin

[Kotlin] 코틀린(Kotlin) while과 for 루프

깡냉쓰 2020. 11. 9. 23:27
728x90
반응형

2.4 대상을 이터레이션: while과 for 루프

while 루프는 자바와 동일하므로 패스, for 는 자바의 for-each 루프에 해당하는 형태만 존재

2.4.2 수에 대한 이터레이션: 범위와 수열

코틀린에서는 자바의 for 루프에 해당하는 요소가 없다. 이런 루프의 가장 흔한 용례인 초깃값, 증가 값, 최종 값을 사용한 루프를 대신하기 위해 코틀린에서는 범위(range)를 사용한다.

// 범위는 기본적으로 두 값으로 이뤄진 구간이며 .. 연산자로 시작 값과 끝 값을 연결해서 범위를 만든다.
val oneToTen = 1..10
fun fizzBuzz(i: Int) = when {
    i % 15 == 0 -> "FizzBuzz"
    i % 3 == 0 -> "Fizz "
    i % 5 == 0 -> "Buzz "
    else -> "$i "
}

>>> for(i in 1...100){
        ... print(fizzBuzz(i))
        ... }

// 100 downTo 1 (역방향 수열을 만든다.)
// step2 (증가 값의 절대값이 2로 바뀐다. -2 ..)
>>> for(i in 100 downTo 1 step 2){
        ... print(fizzBuzz(i))
        ... }

2.4.3 맵에 대한 이터레이션

val binaryReps = TreeMap<Char, String>()

for(c in 'A'..'F'){ // A부터 F까지 문자의 범위를 사용해 이터레이션
    val binary = Integer.toBinaryString(c.toInt()) // ASCII 코드를 2진 표현으로 변경
    binaryReps[c] = binary // c를 키로 c의 2진 표현을 맵에 넣는다.
}

for((letter, binary) in binaryReps){
    println("$letter = $ibary");
}

get과 put을 사용하는 대신 map[key]나 map[key] = value를 사용해 값을 가져오고 설정할 수 있다.

val list = arrayListOf("10", "11", "1001")
for ((index, element) in list.withIndex()){
    println("$index: $element")
}

2.4.4 in으로 컬렉션이나 범위의 원소 검사

in 연산자를 사용해 어떤 값이 범위에 속하는지 검사할 수 있다. 반대로 !in을 사용하면 어떤 값이 속하지 않는지 검사할 수 있다.

fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'

//'a'<=c && c<='z'로 변환한다.
c in 'a'..'z'
728x90
반응형