Le mot-clé by
Déléguer l’implémentation d’une interface
Le mot-clé by 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 que la délégation ?
La délégation de classe permet à un objet de confier l'implémentation d'une interface à un autre objet. Kotlin intègre cette possibilité au langage avec le mot-clé de délégation.
C'est une composition rendue simple.
Une interface à déléguer
Commencez par une interface et une implémentation concrète. Nous déléguerons ensuite à cette implémentation.
interface Speaker {
fun speak(): String
}
class LoudSpeaker : Speaker {
override fun speak() = "HELLO!"
}
fun main() {
println(LoudSpeaker().speak())
}Le mot-clé de délégation
Écrivez class X(d: Iface) : Iface by d. Le compilateur génère des méthodes de relais qui appellent d pour chaque membre de l'interface.
interface Speaker {
fun speak(): String
}
class LoudSpeaker : Speaker {
override fun speak() = "HELLO!"
}
class Announcer(s: Speaker) : Speaker by s
fun main() {
val a = Announcer(LoudSpeaker())
println(a.speak())
}Aucun code répétitif
Sans le mot-clé de délégation, vous devriez écrire manuellement une méthode de relais pour chaque fonction de l'interface. La délégation les génère toutes automatiquement.
interface Repository {
fun save(item: String): String
fun count(): Int
}
class MemoryRepo : Repository {
private val items = mutableListOf<String>()
override fun save(item: String): String { items.add(item); return item }
override fun count() = items.size
}
class LoggingRepo(r: Repository) : Repository by r
fun main() {
val repo = LoggingRepo(MemoryRepo())
repo.save("a")
println(repo.count())
}Redéfinir certains membres
Vous pouvez redéfinir uniquement les membres que vous souhaitez personnaliser ; les autres continuent d'être transmis au délégué.
interface Repository {
fun save(item: String): String
fun count(): Int
}
class MemoryRepo : Repository {
private val items = mutableListOf<String>()
override fun save(item: String): String { items.add(item); return item }
override fun count() = items.size
}
class LoggingRepo(private val r: Repository) : Repository by r {
override fun save(item: String): String {
println("saving " + item)
return r.save(item)
}
}
fun main() {
val repo = LoggingRepo(MemoryRepo())
repo.save("book")
println(repo.count())
}Le délégué comme paramètre
Le délégué est généralement transmis par le constructeur primaire. Vous pouvez conserver une référence avec private val si vous redéfinissez également certains membres.
interface Clock { fun now(): Int }
class FixedClock : Clock { override fun now() = 12 }
class App(private val clock: Clock) : Clock by clock
fun main() {
println(App(FixedClock()).now())
}Déléguer des interfaces standard
Vous pouvez déléguer à des interfaces de collections intégrées et obtenir instantanément une enveloppe qui se comporte comme la collection sous-jacente.
class TaggedList(private val inner: List<String>) : List<String> by inner {
val tag = "v1"
}
fun main() {
val tl = TaggedList(listOf("x", "y"))
println(tl.size)
println(tl[0])
println(tl.tag)
}Comment le code est compilé
En coulisses, le compilateur stocke le délégué et produit des implémentations de relais. Les méthodes générées appellent simplement la méthode correspondante du délégué. C'est l'équivalent d'un relais écrit à la main, sans la saisie répétitive.
Un instantané capturé
Subtilité importante : la référence du délégué est capturée lors de la construction de l'objet. Les membres redéfinis appellent explicitement le délégué, tandis que les relais générés utilisent l'instance fournie à l'origine.
interface Source { fun value(): Int }
class Const(val n: Int) : Source { override fun value() = n }
class Wrapper(s: Source) : Source by s
fun main() {
val w = Wrapper(Const(42))
println(w.value())
}Pourquoi utiliser la délégation
La délégation vous permet de :
- Réutiliser des implémentations existantes
- Ajouter un comportement sans créer de sous-classe
- Éviter les hiérarchies d'héritage fragiles
Il s'agit de la prise en charge native par Kotlin du principe de la composition plutôt que de l'héritage.
Le fondement
Ce mot-clé de délégation est le fondement de tout ce cours. Nous examinerons ensuite plus attentivement la délégation à des objets membres pour composer un comportement.
Vérification rapide
Vérifiez votre compréhension du mot-clé de délégation.
Récapitulatif
Vous avez appris la délégation de classe avec by :
- Déléguer une interface à un autre objet
- Des méthodes de relais générées automatiquement
- Redéfinir certains membres tout en transmettant les autres
- Fonctionner également avec les interfaces intégrées
Ensuite : déléguer à des membres pour composer un comportement.
Questions Fréquemment Posées
La leçon « Le mot-clé by » est-elle gratuite ?
Oui — le texte complet de « Le mot-clé by » 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 « Le mot-clé by » ?
Déléguer l’implémentation d’une interface 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 « Le mot-clé by » ?
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.