# for

* 자바가 인덱스 기반 for문과 for-each 문을 지원하는 반면 코틀린은 for-each 형태만 지원하며, 반자를 통해 접근하는 인자의 타입을 생략할 수 있다.

```java
//java
List<String> names = ... // 이름목록

//for-each
for(String name : names) {
    Log.d("Name:", "name = " + name);
}
```

```kotlin
//kotlin
val names: List<String> = ...

//변수 name의 타입은 리스트 names를 통해 String으로 추론하므로
//타입을 굳이 명시하지 않아도 된다.
for(name in names) {
    Log.d("Name", "name=" + name)
}
```

#### for 문 에서의 인덱스 접근

* for문 내에서 현재 항목의 인덱스가 필요할 경우, Collection.indicies 프로퍼티를 사용하면 컬렉션의 인덱스를 순환하며 인덱스 인자로 배열 내 항목에 접근할 수 있다.

```kotlin
//kotlin
val names: List<String> = ...

for(i in names.indicies) {
    //인덱스 인자로 배열 내 항목 접근
    Log.e("Name", "name=${names[i]}")
}
```

#### 범위

* 코틀린에서는 순환 범위를 표현하기 위해 별도의 자료구조를 사용한다.
* 범위(range)는 코틀린에만 있는 독특한 자료구조로, 특정 범위를 순환하거나 해당 범위내에 특정 항목이 포함되어 있는지 확인할 때 사용한다.
* range는 **..** 연산자를 사용하여 정의한다.

```kotlin
//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 함수를 사용하면 가장 마지막 값을 포함하지 않는 범위를 생성할 수 있다.

```kotlin
val items: List<String> = ...

//0번 인덱스부터 3번 인덱스까지 총 4개 항목을 포함하는 범위
val myRange: IntRange = 0..3

//myRange와 동일한 항목을 포함하는 범위 (미)
val myRange2: IntRange = 0 until 4
```

범위내에 특정 항목이 있는지 알아보려면 in 연산자를 사용한다.

```kotlin
val myRange: IntRange = 0..10

//5가 myRange에 포함되어 있는지 검사: true반환
val foo: Boolean = 5 in myRange

//5가 myRange안에 포함되지 않는지 검사: false반환
val bar: Boolean = 5 !in myRange
```

downTo() : 역순으로 수행한다.

```kotlin
for (i in 4 downTo 1) print(i) // prints "4321"
```

step() : interval 설정이 가능하다.

```kotlin
for (i in 1..4 step 2) print(i) // prints "13"

for (i in 4 downTo 1 step 2) print(i) // prints "42"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gold.gitbook.io/kotlin/expression/for.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
