//kotlin
val names: List<String> = ...
//변수 name의 타입은 리스트 names를 통해 String으로 추론하므로
//타입을 굳이 명시하지 않아도 된다.
for(name in names) {
Log.d("Name", "name=" + name)
}
for 문 에서의 인덱스 접근
for문 내에서 현재 항목의 인덱스가 필요할 경우, Collection.indicies 프로퍼티를 사용하면 컬렉션의 인덱스를 순환하며 인덱스 인자로 배열 내 항목에 접근할 수 있다.
//kotlin
val names: List<String> = ...
for(i in names.indicies) {
//인덱스 인자로 배열 내 항목 접근
Log.e("Name", "name=${names[i]}")
}
범위
코틀린에서는 순환 범위를 표현하기 위해 별도의 자료구조를 사용한다.
범위(range)는 코틀린에만 있는 독특한 자료구조로, 특정 범위를 순환하거나 해당 범위내에 특정 항목이 포함되어 있는지 확인할 때 사용한다.
range는 .. 연산자를 사용하여 정의한다.
//kotlin
//0부터 10까지, 시작과 끝을 포함하는 범위를 정의한다.
val myRange : IntRange = 0..10 //IntRange클래스를 사용하여 배열 인덱스의 순환 범위를 표현한다.
//위에서 정의한 범위를 순환하는 for문
for(i in myRange) {
//Do something
}
//for문 안에서 바로 범위를 지정할수도 있다.
for(i in 0..10) {
//Do something
}
인덱스 순환을 위한 범위를 생성하는 경우 .. 연산자 대신에 until 함수를 사용하면 가장 마지막 값을 포함하지 않는 범위를 생성할 수 있다.
val items: List<String> = ...
//0번 인덱스부터 3번 인덱스까지 총 4개 항목을 포함하는 범위
val myRange: IntRange = 0..3
//myRange와 동일한 항목을 포함하는 범위 (미)
val myRange2: IntRange = 0 until 4
범위내에 특정 항목이 있는지 알아보려면 in 연산자를 사용한다.
val myRange: IntRange = 0..10
//5가 myRange에 포함되어 있는지 검사: true반환
val foo: Boolean = 5 in myRange
//5가 myRange안에 포함되지 않는지 검사: false반환
val bar: Boolean = 5 !in myRange
downTo() : 역순으로 수행한다.
for (i in 4 downTo 1) print(i) // prints "4321"
step() : interval 설정이 가능하다.
for (i in 1..4 step 2) print(i) // prints "13"
for (i in 4 downTo 1 step 2) print(i) // prints "42"