Szukaj…


Uwagi

W Kotlin pętle są kompilowane do zoptymalizowanych pętli, tam gdzie to możliwe. Na przykład, jeśli wykonasz iterację w zakresie liczb, kod bajtowy zostanie skompilowany do odpowiedniej pętli na podstawie zwykłych wartości int, aby uniknąć narzutu wynikającego z tworzenia obiektów.

Powtórz akcję x razy

repeat(10) { i ->
    println("This line will be printed 10 times")
    println("We are on the ${i + 1}. loop iteration")
}

Pętla nad iteracjami

Możesz zapętlić dowolną iterowalną przy użyciu standardowej pętli for:

val list = listOf("Hello", "World", "!")
for(str in list) {
    print(str)
}

Wiele rzeczy w Kotlinie jest iterowalnych, na przykład zakresy liczb:

for(i in 0..9) {
    print(i)
}

Jeśli potrzebujesz indeksu podczas iteracji:

for((index, element) in iterable.withIndex()) {
    print("$element at index $index")
}

Istnieje również funkcjonalne podejście do iteracji zawarte w standardowej bibliotece, bez widocznych konstrukcji języka, za pomocą funkcji forEach:

iterable.forEach {
    print(it.toString())
}

it w tym przykładzie niejawnie posiada aktualnego elementu, zobacz Funkcje lambda

Podczas gdy pętle

Pętle while i do-while działają tak jak w innych językach:

while(condition) {
    doSomething()
}

do {
    doSomething()
} while (condition)

W pętli do-while blok warunków ma dostęp do wartości i zmiennych zadeklarowanych w treści pętli.

Przerwij i kontynuuj

Przerywaj i kontynuuj słowa kluczowe działają tak jak w innych językach.

while(true) {
    if(condition1) {
        continue // Will immediately start the next iteration, without executing the rest of the loop body
    }
    if(condition2) {
        break // Will exit the loop completely
    }
}

Jeśli masz zagnieżdżone pętle, możesz oznaczyć instrukcje pętli i zakwalifikować instrukcje break i Continue, aby określić, która pętla ma być kontynuowana lub przerywana:

outer@ for(i in 0..10) {
    inner@ for(j in 0..10) {
        break       // Will break the inner loop
        break@inner // Will break the inner loop
        break@outer // Will break the outer loop
    }
}

To podejście nie działa jednak w przypadku funkcjonalnej konstrukcji forEach .

Iterowanie po mapie w kotlinie

//iterates over a map, getting the key and value at once

var map = hashMapOf(1 to "foo", 2 to "bar", 3 to "baz")

for ((key, value) in map) {
    println("Map[$key] = $value")
}

Rekurencja

Pętle za pomocą rekurencji są również możliwe w Kotlin, podobnie jak w większości języków programowania.

fun factorial(n: Long): Long = if (n == 0) 1 else n * factorial(n - 1)

println(factorial(10)) // 3628800

W powyższym przykładzie funkcja factorial będzie wywoływana wielokrotnie sama do momentu spełnienia określonego warunku.

Konstrukcje funkcjonalne do iteracji

Biblioteka standardowa Kotlin zapewnia również wiele przydatnych funkcji do iteracyjnej pracy nad kolekcjami.

Na przykład funkcji map można użyć do przekształcenia listy elementów.

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.map { "Number $it" }

Jedną z wielu zalet tego stylu jest możliwość łączenia operacji w podobny sposób. Wymagana byłaby tylko niewielka modyfikacja, jeśli powiedzmy, że powyższa lista była potrzebna do filtrowania liczb parzystych. Można użyć funkcji filter .

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.filter { it % 2 == 0 }.map { "Number $it" }


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow