Kotlin Academy · Leçon

Accesseurs get et set personnalisés avec field

Écrivez des propriétés calculées et des accesseurs set personnalisés à l’aide du mot-clé field représentant le champ de stockage.

Leçon 3 sur 413 étapes

Accesseurs get et set personnalisés avec field est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Les propriétés ne sont pas de simples champs

Chaque propriété Kotlin possède un accesseur généré automatiquement (et, pour var, un mutateur). Vous pouvez les remplacer pour ajouter une logique — validation, journalisation ou calcul.

Accesseur personnalisé

Remplacez get() pour calculer la valeur à chaque lecture.

class Circle(val radius: Double) {
    val area: Double
        get() = Math.PI * radius * radius
}
fun main() {
    val c = Circle(3.0)
    println(c.area) // ~28.27
}

Propriétés calculées

Les propriétés calculées n’ont pas de champ de stockage ; leur valeur est calculée à chaque accès.

class Rectangle(val w: Int, val h: Int) {
    val area get() = w * h
    val perimeter get() = 2 * (w + h)
}
fun main() {
    val r = Rectangle(3, 4)
    println("${r.area}, ${r.perimeter}") // 12, 14
}

Mutateur personnalisé avec field

Dans un mutateur personnalisé, field désigne le champ de stockage — l’espace où la valeur est réellement conservée.

class Temperature {
    var celsius: Double = 0.0
        set(value) {
            require(value >= -273.15) { "below absolute zero" }
            field = value
        }
}
fun main() {
    val t = Temperature()
    t.celsius = 25.0
    println(t.celsius)
    // t.celsius = -300.0 // throws
}

Champ de stockage généré automatiquement

Si l’accesseur ou le mutateur utilise field, Kotlin génère un champ de stockage. Si aucun des deux ne l’utilise, aucun champ n’est créé : la propriété est entièrement calculée.

class Counter {
    var count: Int = 0
        set(value) {
            println("Setting count from $field to $value")
            field = value
        }
}
fun main() {
    val c = Counter()
    c.count = 5
    c.count = 10
}

Mutateur avec effets de bord

Utilisez des mutateurs personnalisés pour la journalisation, la notification des changements ou la synchronisation d’un état associé.

class Brightness {
    var level: Int = 50
        set(value) {
            val clamped = value.coerceIn(0, 100)
            println("Brightness -> $clamped")
            field = clamped
        }
}
fun main() {
    val b = Brightness()
    b.level = 75
    b.level = 150 // clamps to 100
    println(b.level)
}

Mutateur privé

Déclarez le mutateur private pour exposer une API en lecture seule tout en autorisant les modifications internes.

class Score {
    var value: Int = 0
        private set
    fun increment() { value++ }
    fun reset() { value = 0 }
}
fun main() {
    val s = Score()
    s.increment(); s.increment()
    println(s.value) // 2
    // s.value = 100 // ERROR: setter is private
}

Validation dans un mutateur

Les mutateurs personnalisés sont l’endroit naturel pour valider les données d’entrée.

class Email {
    var address: String = ""
        set(value) {
            require(value.contains("@")) { "invalid email" }
            field = value
        }
}
fun main() {
    val e = Email()
    e.address = "ada@example.com"
    println(e.address)
}

Accesseur avec logique

Les accesseurs peuvent transformer l’état stocké — par exemple formater une valeur stockée ou appliquer une valeur de repli par défaut.

class Profile(_name: String?) {
    var rawName: String? = _name
    val displayName: String
        get() = rawName ?: "(unset)"
}
fun main() {
    val p = Profile(null)
    println(p.displayName) // (unset)
}

Comparer val et var

Les propriétés val possèdent uniquement un accesseur (pas de mutateur) ; les propriétés var possèdent les deux.

class Box {
    val readOnly: Int get() = 42
    var readWrite: Int = 0
}
fun main() {
    println(Box().readOnly)
    val b = Box(); b.readWrite = 5; println(b.readWrite)
}

Erreur courante : la récursion

N’utilisez pas le nom de la propriété dans son propre accesseur : cela provoque une récursion infinie. Utilisez plutôt field.

class Wrong {
    var x: Int = 0
        set(value) {
            // x = value // INFINITE RECURSION — calls setter again
            field = value // CORRECT
        }
}
fun main() {
    val w = Wrong(); w.x = 42; println(w.x)
}

Vérification rapide

Dans un setter personnalisé, à quoi l’identifiant field fait-il référence ?

Récapitulatif

Redéfinissez get() et set() pour ajouter une logique à l’accès aux propriétés. Utilisez field dans les accesseurs pour lire ou écrire dans le champ de stockage. Marquez les setters private pour créer des API publiques en lecture seule ; utilisez des propriétés calculées (sans champ de stockage) lorsque la valeur est toujours dérivée.

Gratuit pour commencer

Apprends Kotlin avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Accesseurs get et set personnalisés avec field » est-elle gratuite ?

Oui — le texte complet de « Accesseurs get et set personnalisés avec field » 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 « Accesseurs get et set personnalisés avec field » ?

Écrivez des propriétés calculées et des accesseurs set personnalisés à l’aide du mot-clé field représentant le champ de stockage. 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 3 sur 4.

Combien de temps prend la leçon « Accesseurs get et set personnalisés avec field » ?

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. Constructeur primaire et paramètres de propriétés
  2. Blocs init et ordre d’initialisation
  3. Accesseurs get et set personnalisés avec field
  4. lateinit et initialisation différée
← Retour à Kotlin Academy