0Pricing
Kotlin Academy · Leçon

Propriétés d’extension et extensions calculées

Ajoutez des propriétés calculées à des classes existantes sans créer de sous-classe.

Propriétés d’extension et extensions calculées est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.

Propriétés d'extension

Les propriétés d'extension ajoutent des propriétés calculées aux types existants sans créer de sous-classe. Elles ne possèdent aucun champ de stockage.

Propriété d'extension en lecture seule

Définissez un accesseur pour créer une propriété d'extension calculée.
val String.wordCount: Int
    get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount)  // 3

Propriété d'extension mutable

Définissez à la fois un accesseur et un mutateur pour créer une propriété d'extension accessible en lecture et en écriture.
var MutableList<Int>.first: Int
    get() = this[0]
    set(value) { this[0] = value }
val list = mutableListOf(1, 2, 3)
list.first = 10
println(list)  // [10, 2, 3]

Aucun champ de stockage

Les propriétés d'extension ne peuvent pas posséder de champs de stockage. Elles sont toujours calculées à partir de l'état existant.
// ERROR: extension property cannot have backing field
// var String.cache: String = ""  // NOT allowed!

// OK: computed only:
val String.isPalindrome: Boolean
    get() = this == this.reversed()

Propriétés d'extension sur les collections

Ajoutez des propriétés pratiques aux types de collections.
val <T> List<T>.secondOrNull: T?
    get() = if (size >= 2) this[1] else null
val <T> List<T>.isNotNullOrEmpty: Boolean
    get() = isNotEmpty()
println(listOf(1, 2, 3).secondOrNull)  // 2

Propriétés d'extension booléennes

Créez des propriétés booléennes lisibles pour effectuer des vérifications de type.
val Any.isString: Boolean get() = this is String
val String.hasDigits: Boolean get() = any { it.isDigit() }
val Int.isPositive: Boolean get() = this > 0
println(42.isPositive)        // true
println("abc123".hasDigits)   // true

Propriétés d'extension ou fonctions d'extension

Utilisez une propriété lorsque le calcul est simple et représente une caractéristique de l'objet. Utilisez une fonction lorsqu'elle possède des paramètres ou des effets de bord.
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)

Étendre un objet compagnon

Ajoutez des propriétés d'extension aux objets compagnons.
data class Color(val r: Int, val g: Int, val b: Int) {
    companion object
}
val Color.Companion.RED get() = Color(255, 0, 0)
val Color.Companion.WHITE get() = Color(255, 255, 255)
println(Color.RED)  // Color(r=255, g=0, b=0)

Propriétés d'extension contextuelles

Les propriétés d'extension définies dans une classe ne s'appliquent que lorsque vous vous trouvez dans la portée de cette classe.
class Formatter {
    val Int.formatted: String
        get() = "%,d".format(this)
    fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000))  // 1,000,000

Utiliser les extensions pour les DSL

Les propriétés d'extension sont fondamentales pour la conception des DSL Kotlin.
val Int.dp: Float get() = this * 2.5f
val Float.sp: Float get() = this * 1.0f
// In DSL context:
view.setPadding(16.dp.toInt())

Propriétés d'extension génériques

Les propriétés d'extension peuvent posséder des paramètres de type.
val <T> List<T>.head: T?
    get() = firstOrNull()
val <T> List<T>.tail: List<T>
    get() = drop(1)
println(listOf(1,2,3).head)  // 1
println(listOf(1,2,3).tail)  // [2, 3]

Vérification rapide

Les propriétés d'extension peuvent-elles posséder des champs de stockage dans Kotlin ?

Récapitulatif

Les propriétés d'extension ajoutent des caractéristiques calculées aux types sans champs de stockage. Utilisez-les pour des calculs simples et sans état. Les propriétés d'extension mutables peuvent posséder des mutateurs. Elles sont idéales pour les DSL et les API fluides. Ensuite : les extensions à portée limitée et les extensions d'objets compagnons !

Questions Fréquemment Posées

La leçon « Propriétés d’extension et extensions calculées » est-elle gratuite ?

Oui — le texte complet de « Propriétés d’extension et extensions calculées » 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 « Propriétés d’extension et extensions calculées » ?

Ajoutez des propriétés calculées à des classes existantes sans créer de sous-classe. 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 2 sur 4.

Combien de temps prend la leçon « Propriétés d’extension et extensions calculées » ?

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