코틀린

Iteration

누룽지맛치킨 2023. 1. 26. 15:00

while 루프

  • while
  • do-while
  • 자바와 다르지 않음
while(조건){
    /*...*/
}

do{
    /*...*/
}while(조건)

for 루프

  1. 범위와 수열
    •  범위
      • 폐구간의 범위를 지정 가능b. 수열
      • fun main() { val a = 1..10 println(a is IntRange) }
      • 범위에 속한 값을 일정한 순서로 이터레이션하는 경우
  • 예시
fun fizzBuzz(i: Int) = when{
    i % 15 == 0 -> "FizzBuzz"
    i % 5 == 0 -> "Buzz"
    i % 3 == 0 -> "Fizz"
    else -> "$i"
}

fun main(){
    for(i in 1..100){
        println(fizzBuzz(i))
    }
}
  • 역방향 수열을 원한다면 정수 downTo 정수 사용
  • 증가하는 수를 변경 하고 싶다면 step 키워드 사용
  • 범위를 폐구간이 아닌 임의의 수 전까지 이터레이션을 원할 경우 .. 대신 until 사용

맵에 대한 이터레이션

fun main(){
    val binaryReps = mutableMapOf<Char, String>()
    for(c in 'A' .. 'F'){
        val binary = Integer.toBinaryString(c.toInt())
        binaryReps.put(c, binary)
    }

    for((letter, binary) in binaryReps){
        println("${letter} = ${binary}")
    }
}
  • ..연산자를 숫자 타입의 값뿐 아니라 문자 타입의 값에도 적용 가능
  • 이터레이션하는 컬렉션의 원소를 풀어서 letterbinary라는 두 변수에 저장
    • letter : key 값
    • binary : value 값
fun main(){
    val list = arrayListOf("10","11","1001")
    for ((index, element) in list.withIndex()){
        println("${index}: ${element}")
    }
}
  • 컬렉션에 인덱스를 함께 사용 가능

in을 사용한 원소 검사

  • in 연산자를 사용해 어떤 값이 범위에 속하는지 검사 가능
  • !in을 사용하면 어떤 값이 범위에 속하지 않는지 검사 가능
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'

fun main(){
    println(isLetter('q'))
    println(isNotDigit('x'))
}
  • when 식에서도 사용 가능!
fun recognize(c: Char) = 
    when (c){
        in '0'..'9' -> "It is a Digit"
        in 'a'..'z', in 'A'..'Z' -> "It is a letter"
        else -> "I don't know..."
    }

fun main(){
   println(recognize('8'))
}
  • 범위는 비교가 가능한 클래스라면 그 클래스의 인스턴스 객체를 사용해 범위를 만들 수 있음

문자열 비교

fun main(){
    println("kotlin" in "java".."scala") // true
    println("kotlin" in setOf("java", "scala")) // false
}
  • 위의 출력문은 문자열이 해당 범위 사이에 위치하는지 검사(사전을 생각하면 된다.)
  • 아래 출력문은 문자열이 해당 집합에 속하는지 검사

 

참조

KOTLIN IN ACTION