Recherche…


Remarques

Dans Kotlin, les boucles sont compilées dans la mesure du possible avec des boucles optimisées. Par exemple, si vous effectuez une itération sur une plage de nombres, le bytecode sera compilé dans une boucle correspondante basée sur des valeurs int simples afin d'éviter la surcharge de la création d'objets.

Répéter une action x fois

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

En boucle sur les itérables

Vous pouvez effectuer une boucle sur n'importe quelle itération en utilisant la norme for-loop:

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

Beaucoup de choses dans Kotlin sont itérables, comme les plages de numéros:

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

Si vous avez besoin d'un index en itérant:

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

Il existe également une approche fonctionnelle de l’itération incluse dans la bibliothèque standard, sans apparences de langage, à l’aide de la fonction forEach:

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

it dans cet exemple implicitement l'élément tient en cours, voir Fonctions Lambda

Pendant que les boucles

Les boucles while et do-while fonctionnent comme dans d'autres langues:

while(condition) {
    doSomething()
}

do {
    doSomething()
} while (condition)

Dans la boucle do-while, le bloc de conditions a accès aux valeurs et aux variables déclarées dans le corps de la boucle.

Pause et continuer

Les mots-clés break et continue fonctionnent comme dans d'autres langues.

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
    }
}

Si vous avez des boucles imbriquées, vous pouvez étiqueter les instructions de boucle et qualifier les instructions break et continue pour spécifier la boucle que vous souhaitez continuer ou interrompre:

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
    }
}

Cette approche ne fonctionnera pas pour la construction fonctionnelle de forEach .

Itérer sur une carte à kotlin

//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")
}

Récursivité

La boucle via la récursivité est également possible dans Kotlin comme dans la plupart des langages de programmation.

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

println(factorial(10)) // 3628800

Dans l'exemple ci-dessus, la fonction factorial sera appelée à plusieurs reprises jusqu'à ce que la condition donnée soit remplie.

Constructions fonctionnelles pour itération

La bibliothèque standard de Kotlin fournit également de nombreuses fonctions utiles pour travailler itérativement sur des collections.

Par exemple, la fonction de map peut être utilisée pour transformer une liste d'éléments.

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

L'un des nombreux avantages de ce style est qu'il permet de chaîner les opérations d'une manière similaire. Seule une modification mineure serait nécessaire si, par exemple, la liste ci-dessus devait être filtrée pour les nombres pairs. La fonction de filter peut être utilisée.

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow