Kotlin retour, pause, continue Mots-clés
1. Vue d'ensemble
Dans ce didacticiel, nous aborderons l'utilisation d'expressions de saut structurel dans Kotlin.
En termes simples,Kotlin has three structural jump expressions: return, break, continue. Dans les sections suivantes, nous aborderons leurs fonctionnalités avec et sans étiquette.
2. Étiquettes à Kotlin
Toutes les expressions en Kotlin peuvent être marquées avec une étiquette.
We create a label by using an identifier followed by the “@” sign. Par exemple,[email protected],[email protected] sont des étiquettes valides.
Pour étiqueter une expression, nous ajoutons simplement l'étiquette devant celle-ci:
[email protected] for (i in 1..10) {
// some code
}
3. L'instructionBreak
Sans étiquette,break termine la boucle englobante la plus proche.
Prenons un exemple:
@Test
fun givenLoop_whenBreak_thenComplete() {
var value = ""
for (i in "hello_world") {
if (i == '_') break
value += i.toString()
}
assertEquals("hello", value)
}
Alternativement, nous pouvons utiliserbreak with a label, which terminates the loop marked with that label:
@Test
fun givenLoop_whenBreakWithLabel_thenComplete() {
var value = ""
[email protected] for (i in 'a'..'d') {
for (j in 1..3) {
value += "" + i + j
if (i == 'b' && j == 1)
[email protected]_loop
}
}
assertEquals("a1a2a3b1", value)
}
Dans ce cas, la boucle externe est terminée lorsque les variablesi etj sont respectivement égales à «b» et «1».
4. L'instructionContinue
Examinons ensuite le mot-clécontinue, que nous pouvons également utiliser avec ou sans libellé.
Sans étiquette,continue passera à l'itération suivante de la boucle englobante:
@Test
fun givenLoop_whenContinue_thenComplete() {
var result = ""
for (i in "hello_world") {
if (i == '_') continue
result += i
}
assertEquals("helloworld", result)
}
D'autre part,when we use continue with a label marking a loop, it will proceed to the next iteration of that loop:
@Test
fun givenLoop_whenContinueWithLabel_thenComplete() {
var result = ""
[email protected] for (i in 'a'..'c') {
for (j in 1..3) {
if (i == 'b') [email protected]_loop
result += "" + i + j
}
}
assertEquals("a1a2a3c1c2c3", result)
}
Dans cet exemple, nous avons utilisécontinue pour ignorer une itération de la boucle intituléeouter_loop.
5. L'instructionReturn
Sans étiquette, ilreturns to the nearest enclosing function or anonymous function:
@Test
fun givenLambda_whenReturn_thenComplete() {
var result = returnInLambda();
assertEquals("hello", result)
}
private fun returnInLambda(): String {
var result = ""
"hello_world".forEach {
if (it == '_') return result
result += it.toString()
}
//this line won't be reached
return result;
}
Return est également utile lorsque nous voulonsapply continue logic on anonymousfunctions:
@Test
fun givenAnonymousFunction_return_thenComplete() {
var result = ""
"hello_world".forEach(fun(element) {
if (element == '_') return
result += element.toString()
})
assertEquals("helloworld", result)
}
Dans cet exemple, l'instructionreturn retournera à l'appelant du fun anonyme, c'est-à-dire la boucleforEach.
In the case of a lambda expression, we can also use return with a label pour obtenir un résultat similaire:
@Test
fun givenLambda_whenReturnWithExplicitLabel_thenComplete() {
var result = ""
"hello_world".forEach [email protected]{
if (it == '_') {
[email protected]
}
result += it.toString()
}
assertEquals("helloworld", result)
}
Alternativement, nous pouvons aussireturn using an implicit label:
@Test
fun givenLambda_whenReturnWithImplicitLabel_thenComplete() {
var result = ""
"hello_world".forEach {
if (it == '_') {
// local return to the caller of the lambda, i.e. the forEach loop
[email protected]
}
result += it.toString()
}
assertEquals("helloworld", result)
}
Dans l'exemple ci-dessus, l'instruction return retournera également à l'appelant du lambda - la boucleforEach.
Enfin,return peut être utilisé avec une étiquette versapply break logic to lambda expressions byreturning to a label outside:
@Test
fun givenAnonymousFunction_returnToLabel_thenComplete() {
var result = ""
run [email protected]{
"hello_world".forEach {
if (it == '_') [email protected]
result += it.toString()
}
}
assertEquals("hello", result)
}
6. Conclusion
Dans cet article, nous avons passé en revue les cas d'utilisation dereturn, break, continue dans Kotlin.
L'exemple de code a pu être trouvéover on Github.