Kotlin
Pętle w Kotlinie
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" }