반응형
이 글은 Kotlin In Action을 참고 하였습니다.
더욱 자세한 설명이나 예제는 직접 책을 구매하여 확인 하시기 바랍니다
2.4 while과 for
코틀린은 for-each에 해당하는 형태만 존재 합니다.
따라서 for <item> in <elements> 형태로 사용됩니다.
while과 do-while문은 기존 java와 사용법이 같습니다.
따라서 형태가 좀 다른 for문을 보도록 하겠습니다.
2.4.2 Number iteration
기존 자바에서 for문을 쓰는 가장 기본적인 문법은 초기값, 증가값, 반복조건 입니다.
코틀린에서는 이런값 대신에 range를 사용합니다.
fun fizzBuzz(i: Int) = when {
i % 15 == 0 -> "FizzBuzz "
i % 3 == 0 -> "Fizz "
i % 5 == 0 -> "Buzz "
else -> "$i "
}
fun main(args: Array) {
// 1~ 100 까지
for (i in 1..100) {
print(fizzBuzz(i))
}
// 100 부터 1까지 2개 간격으로 (-2씩 차감되면서 반복)
for (i in 100 downTo 1 step 2) {
print(fizzBuzz(i))
}
}
위와같이 var i = 1..100는 i변수에 1~100까지의(100 포함) 범위를 담습니다.
반대로 100 downTo 1은 역순으로 진행되면 step 2 로 설정했으므로 사실 -2씩 감소되면서 진행됩니다.
.. 은 우항을 포함합니다만, 사실 자바를 쓸때 우항은 포함하지 않도록 사용하는게 대부분 입니다.
이때는 until을 사용하면 됩니다.
for (x in 1..size-1) {
//..
}
for (x in 1 until size) {
//..
}
위 두개는 같은 표현 입니다.2.4.3 Map, List에 대한 이터레이션
in 연산자는 확장성을 가지기 때문에 여러가지 형태로 사용할수 있습니다.
"이게 되나??" 싶을정도 확장성을 갖는 연산자로 아래와 같은 형태로도 사용이 가능합니다.
fun main(args: Array) {
val binaryReps = TreeMap()
for (c in 'A'..'F') {
val binary = Integer.toBinaryString(c.toInt())
binaryReps[c] = binary
}
for ((letter, binary) in binaryReps) {
println("$letter = $binary")
}
}
Map을 iteration할때 위와같이 for문에 in 연산자를 사용하면 key와 value를 동시에 뽑아낼수 있습니다.
자바보다 훨씬 편합니다~
또한 list의 경우에 index와 함께 뽑고 싶다면, 내부적으로 (보통 i 라는 이름으로) 변수를 따로 잡지 않고도 수행할 수 있습니다.
val list = arrayListOf("10", "11", "12")
for ((index, value) in list.withIndex()) {
println("index: $index, vaue: $value")
}
2.4.4 in을 이용한 컬렉션이나 범위의 원소 검사
in을 이용하여 해당 원소가 collection이나 특정 범위(range)에 속해있는지도 검사할 수 있습니다.
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
fun main(args: Array) {
println(isLetter('q'))
println(isNotDigit('x'))
}
위 예제는 in을 이용하여 range 내부에 특정값이 존재하는지를 확인할 수 있고, !in을 사용하여 포함되지 않는지를 검사할 수 있습니다.
in 연산자는 해당 object가 Comparable을 구현했다면 사용이 가능합니다.
println("Kotlin" in "Java".."Scala") // "Java" <= "Kotlin" && "Kotlin" <= "Scala" 와 같다.
// true
println("Kotlin" in setOf("Java", "Scala")) // 집합 내부에는 Kotlin이 들어가 있지 않다.
// false
반응형
'개발이야기 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린의 Collection (2) | 2018.04.15 |
---|---|
[Kotlin] 코틀린의 기초 #4 exception 처리 (0) | 2018.04.13 |
[Kotlin] 코틀린 기초 #2 enum, when (2) | 2018.04.11 |
[Kotlin] 코틀린의 기초#1 - 함수,변수,클래스,property (4) | 2017.11.27 |
[Kotlin] 코틀린이란? (0) | 2017.11.26 |