Je sais qu'une fonction inline peut améliorer les performances et faire grossir le code généré, mais je ne sais pas quand il est correct de l'utiliser.
lock(l) { foo() }
Au lieu de créer un objet fonction pour le paramètre et de générer un appel, le compilateur pourrait émettre le code suivant. ( Source : )
l.lock()
try {
foo()
}
finally {
l.unlock()
}
mais j'ai constaté qu'il n'y a pas d'objet fonction créé par kotlin pour une fonction non-inline. pourquoi ?
/**non-inline function**/
fun lock(lock: Lock, block: () -> Unit) {
lock.lock();
try {
block();
} finally {
lock.unlock();
}
}
8 votes
Il existe deux cas d'utilisation principaux pour cela, l'un concerne certains types de fonctions d'ordre supérieur, et l'autre les paramètres de type réifié. La documentation des fonctions en ligne couvre ces cas : kotlinlang.org/docs/reference/inline-functions.html
5 votes
@zsmb13 merci, monsieur. mais je ne comprends pas que : "Au lieu de créer un objet fonction pour le paramètre et de générer un appel, le compilateur pourrait émettre le code suivant".
5 votes
Je ne comprends pas non plus cet exemple.
0 votes
Qu'est-ce qui vous fait dire qu'un
inline
peut améliorer les performances, et que cela serait perceptible par l'utilisateur ?