0Pricing
Kotlin Academy · Leçon

Fonctions inline : éliminer le surcoût des lambdas

Marquez les fonctions comme inline pour éviter la création d’objets pour les paramètres lambda.

Fonctions inline : éliminer le surcoût des lambdas est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.

Qu’est-ce qu’une fonction inline ?

Normalement, une lambda passée à une fonction est compilée sous la forme d’une classe anonyme. Chaque appel crée un nouvel objet, ce qui coûte de la mémoire et du temps. Le mot-clé inline indique au compilateur de copier le corps de la fonction (ainsi que ses arguments lambda) directement à l’emplacement de l’appel.

Déclarer une fonction inline

Ajoutez le modificateur inline avant fun :

inline fun measureTime(block: () -> Unit): Long {
    val start = System.nanoTime()
    block()
    return System.nanoTime() - start
}

Comment le compilateur réécrit l’appel

Un appel tel que measureTime { doWork() } devient, au niveau du code-octet, le corps de measureTime inséré directement : aucun objet lambda n’est créé.

Quand utiliser inline

Utilisez inline lorsque :

  • la fonction accepte un ou plusieurs paramètres lambda
  • elle est appelée fréquemment dans des chemins critiques (boucles serrées, fonctions composables)
  • vous avez besoin de paramètres de type reified (présentés ensuite)

Exemple de mesure des performances

Sans inline, chaque appel à une fonction d’ordre supérieur crée un objet lambda. Avec ce modificateur, le JVM voit du code séquentiel : aucune allocation ni invocation virtuelle.

inline fun repeat(n: Int, block: () -> Unit) {
    for (i in 0 until n) block()
}

Retours non locaux

Un avantage important des fonctions inline : la lambda peut utiliser return pour quitter la fonction englobante, et pas seulement la lambda. On parle alors de retour non local.

inline fun forEach(list: List<Int>, block: (Int) -> Unit) {
    for (item in list) block(item)
}

fun findFirst(list: List<Int>): Int {
    forEach(list) { if (it > 5) return it }  // returns from findFirst
    return -1
}

Limites de inline

Les fonctions inline ne peuvent pas être stockées dans des variables ni transmises comme des objets, car elles n’existent pas en tant qu’entités de première classe à l’exécution. Vous ne pouvez pas appeler f(::measureTime) lorsque f attend une référence de fonction avec cette signature.

Intégration des chaînes de traitement de collections

Les fonctions de la bibliothèque standard map, filter, forEach, etc. sont toutes inline. C’est pourquoi leur chaînage ne crée pas d’objets de fermeture supplémentaires pour chaque élément.

val result = (1..1_000_000)
    .filter { it % 2 == 0 }   // inline
    .map { it * it }           // inline
    .take(10)

Compromis sur la taille du code

Chaque emplacement d’appel reçoit une copie du code intégré. Si le corps de la fonction est volumineux et appelé depuis de nombreux endroits, la taille du code-octet augmente. Préférez inline pour les petites lambdas appelées fréquemment.

Interaction avec les fonctions compagnons et de niveau supérieur

inline fonctionne avec les fonctions de niveau supérieur et les fonctions membres. Il ne fonctionne pas avec les propriétés ni les constructeurs. La fonction doit être visible à l’emplacement de l’appel, généralement public ou internal.

Exemples de la bibliothèque standard

Voici des fonctions que vous connaissez déjà et qui sont inline : let, run, apply, also, with, use, synchronized, lazy (variante avec bloc). Le modificateur inline rend leurs lambdas gratuites en termes de coût d’exécution.

Vérification rapide

Quel est le principal avantage de déclarer une fonction d’ordre supérieur comme inline ?

Récapitulatif&nbsp;: fonctions inline

À retenir :

  • inline élimine la création d’objets lambda
  • permet les retours non locaux depuis les lambdas
  • est requis pour les paramètres de type reified
  • convient particulièrement aux petites fonctions d’ordre supérieur appelées fréquemment
  • les fonctions de portée de la bibliothèque standard sont toutes inline

Questions Fréquemment Posées

La leçon « Fonctions inline : éliminer le surcoût des lambdas » est-elle gratuite ?

Oui — le texte complet de « Fonctions inline : éliminer le surcoût des lambdas » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fonctions inline : éliminer le surcoût des lambdas » ?

Marquez les fonctions comme inline pour éviter la création d’objets pour les paramètres lambda. Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Kotlin Academy ?

Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Fonctions inline : éliminer le surcoût des lambdas » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?

Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fonctions inline : éliminer le surcoût des lambdas
  2. Modificateurs noinline et crossinline
  3. Paramètres de types reified : accéder à T à l’exécution
  4. Modèles pratiques avec reified : analyse, DI et sérialisation
← Retour à Kotlin Academy