Hoe werken extensiefuncties in Kotlin?
sobes.tech AI
Antwoord van AI
Extensiefuncties maken het mogelijk om nieuwe functies toe te voegen aan bestaande klassen zonder er van te erven of decorateurs te gebruiken.
Ze worden gedeclareerd met een prefix die het type aangeeft dat wordt uitgebreid:
fun String.removeFirstChar(): String {
// this verwijst naar het object van het uitgebreide type (String)
return this.substring(1)
}
Bij het aanroepen van een extensiefunctie, zet de compiler deze om in een statische methode, die als eerste argument het uitgebreide object ontvangt:
// Aanroep van de extensiefunctie
val original = "Hello"
val modified = original.removeFirstChar()
// De compiler zet de aanroep ongeveer om als:
// val modified = StringExtensionsKt.removeFirstChar(original)
(Waar StringExtensionsKt de naam is van de gegenereerde Kotlin-klasse met statische methoden, als de extensiefunctie buiten een klasse staat.)
Extensiefuncties wijzigen niet de klasse zelf. Ze bieden alleen syntactische suiker voor het aanroepen van statische methoden. Ze hebben geen toegang tot private of protected leden van de uitgebreide klasse.
Het belangrijkste voordeel is een meer leesbare code, die objectgeoriënteerd programmeren imiteert, zonder problemen met overerving.
Elke klasse kan worden uitgebreid, inclusief standaardbibliotheken en Java-klassen. Extensiefuncties kunnen leden zijn van een andere klasse, in welk geval ze alleen binnen die klasse worden aangeroepen.
Bij het oplossen van overloads en conflicten krijgt de ledenfunctie van de klasse prioriteit boven de extensiefunctie. Als er meerdere extensiefuncties met dezelfde handtekening zijn, heeft degene die lokaal is gedeclareerd (in dezelfde scope) prioriteit.