0Pricing
Kotlin Academy · Leçon

Fonctions d’extension : syntaxe et règles de résolution

Écrivez des fonctions d’extension et comprenez la résolution statique.

Fonctions d’extension : syntaxe et règles de résolution 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.

Que sont les fonctions d'extension ?

Les fonctions d'extension permettent d'ajouter de nouvelles fonctions à des classes existantes sans les modifier ni utiliser l'héritage.

Syntaxe de base d'une fonction d'extension

Faites précéder le nom de la fonction par le type que vous étendez, appelé type récepteur.
fun String.shout(): String = uppercase() + "!"
println("hello".shout())  // HELLO!
fun Int.isEven() = this % 2 == 0
println(4.isEven())  // true

this dans les extensions

Dans une fonction d'extension, 'this' désigne l'objet récepteur.
fun List<Int>.secondOrNull(): Int? {
    return if (size >= 2) this[1] else null
}
println(listOf(10, 20, 30).secondOrNull())  // 20
println(listOf(5).secondOrNull())           // null

Résolution statique&nbsp;: les extensions ne redéfinissent pas les fonctions

Les fonctions d'extension sont résolues statiquement à la compilation selon le type déclaré : elles ne sont NOT virtuelles.
open class Base
class Child : Base()
fun Base.greet() = "Hello from Base"
fun Child.greet() = "Hello from Child"

val obj: Base = Child()
println(obj.greet())  // "Hello from Base" (static dispatch!)

Extensions et fonctions membres

Si une classe possède une fonction membre avec la même signature qu'une extension, la fonction membre est toujours prioritaire.
class Greeter {
    fun hello() = "member hello"
}
fun Greeter.hello() = "extension hello"  // shadowed!
println(Greeter().hello())  // "member hello"

Extensions avec récepteur nullable

Vous pouvez étendre des types nullables. À l'intérieur, gérez la valeur nulle avec des vérifications 'this == null'.
fun String?.orEmpty() = this ?: ""
fun Any?.toStringSafe() = this?.toString() ?: "null"
println(null.orEmpty())  // ""
println(42.toStringSafe())  // "42"

Visibilité et portée

Les extensions peuvent être définies au niveau supérieur (global), dans une classe (extensions membres) ou dans un fichier. Elles suivent les règles normales de visibilité.
// Top-level extension:
fun List<String>.joinUppercase() = joinToString { it.uppercase() }
// Private to file:
private fun String.clean() = trim().lowercase()

Extensions d'un objet compagnon

Ajoutez des extensions à un objet compagnon pour étendre l'espace de noms associé à la classe.
class User(val name: String) {
    companion object
}
fun User.Companion.guest() = User("Guest")
val guest = User.guest()

Extensions des types de la bibliothèque standard

Étendez n'importe quel type, y compris les types intégrés.
fun Double.roundTo(decimals: Int): Double {
    val factor = Math.pow(10.0, decimals.toDouble())
    return Math.round(this * factor) / factor
}
println(3.14159.roundTo(2))  // 3.14

Organiser les extensions

Regroupez les extensions d'un type dans un fichier dédié, par exemple StringExtensions.kt ou DateExtensions.kt.
// StringExtensions.kt
fun String.titleCase() = split(" ")
    .joinToString(" ") {
        it.replaceFirstChar { c -> c.uppercase() }
    }
println("hello world".titleCase())  // Hello World

Les extensions n'accèdent pas aux membres privés

Les extensions n'ont accès qu'aux membres publics et internes, et non aux membres privés ou protégés.
class Secret {
    private val key = "hidden"
    val name = "public"
}
fun Secret.reveal() {
    println(name)  // OK
    // println(key)  // Error: key is private
}

Vérification rapide

Si une fonction membre de classe et une fonction d'extension ont la même signature, laquelle est appelée ?

Récapitulatif

Les fonctions d'extension ajoutent un comportement à n'importe quelle classe sans la modifier. Leur résolution est statique (sans redéfinition). Les membres sont prioritaires sur les extensions. Utilisez des récepteurs nullables pour créer des utilitaires sûrs face aux valeurs nulles. Ensuite : les propriétés d'extension !

Questions Fréquemment Posées

La leçon « Fonctions d’extension : syntaxe et règles de résolution » est-elle gratuite ?

Oui — le texte complet de « Fonctions d’extension : syntaxe et règles de résolution » 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 d’extension : syntaxe et règles de résolution » ?

Écrivez des fonctions d’extension et comprenez la résolution statique. 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 d’extension : syntaxe et règles de résolution » ?

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 d’extension : syntaxe et règles de résolution
  2. Propriétés d’extension et extensions calculées
  3. Extensions limitées et extensions de companion object
  4. Extensions pratiques : utilitaires pour Context, View et String
← Retour à Kotlin Academy