Junior — Middle
Est-il possible d'effectuer un retour depuis une fonction en dehors du contexte actuel à l'intérieur d'une fonction déclarée comme crossinline en Kotlin?
sobes.tech IA
Réponse de l'IA
En Kotlin, une fonction déclarée avec le modificateur crossinline interdit l'exécution d'un retour non contrôlé (non-local return) depuis la lambda qu'elle accepte. Cela signifie qu'il n'est pas possible d'utiliser return dans la lambda pour sortir de la fonction externe dans laquelle cette lambda est appelée.
Exemple:
inline fun foo(crossinline block: () -> Unit) {
val runnable = Runnable {
block() // il n'est pas possible d'utiliser un non-local return ici
}
runnable.run()
}
fun bar() {
foo {
// return // erreur de compilation, non-local return impossible
println("Exécution de la lambda")
}
println("Suite de la fonction bar")
}
Ainsi, il est impossible de faire un retour depuis la fonction en dehors du contexte actuel à l'intérieur d'une lambda crossinline. Cette restriction est mise en place pour la sécurité et la prévisibilité du code, notamment lors de l'utilisation de lambdas dans des appels asynchrones ou différés.