Wat is het verschil tussen de extensiefuncties let, run, also en apply in Kotlin?
sobes.tech AI
Antwoord van AI
let: Roept een afsluiting aan op een object en geeft het resultaat van de afsluiting terug. Maakt het mogelijk om het object als argument te gebruiken in een lambda-uitdrukking (it). Geschikt voor werken met nullable objecten.
// Voorbeeld van gebruik van let
val nullableString: String? = "Hello"
val length = nullableString?.let {
// it - is een niet-null String
it.length
}
run: Voert een codeblok uit op een object en geeft het resultaat van het blok terug. Binnen het blok is het object toegankelijk als this. Handig voor het initialiseren van objecten en het aanroepen van methoden.
// Voorbeeld van gebruik van run
val result = buildString {
// this - is een StringBuilder
append("Start\n")
append("Middle\n")
}.run {
// this - is een String
uppercase()
}
also: Roept een afsluiting aan op een object en geeft het object zelf terug. Maakt het mogelijk om aanvullende acties uit te voeren (zoals logging of configuratie) op het object zonder het te wijzigen.
// Voorbeeld van gebruik van also
val list = mutableListOf("a", "b", "c").also {
// it - is een MutableList
println("Lijst gemaakt: $it")
}
apply: Roept een afsluiting aan op een object en geeft het object zelf terug. Binnen het blok is het object toegankelijk als this. Handig voor het instellen van eigenschappen van het object.
// Voorbeeld van gebruik van apply
val textView = TextView(context).apply {
// this - is een TextView
text = "Hallo, wereld!"
textSize = 16f
setTextColor(Color.BLACK)
}
Belangrijkste verschillen:
| Functie | Hoe is het object toegankelijk | Wat retourneert het | Typisch gebruik |
|---|---|---|---|
let |
it |
Resultaat van lambda | Nullable-objecten, transformatie |
run |
this |
Resultaat van lambda | Initialisatie en methoden aanroepen |
also |
it |
Het object zelf | Aanvullende acties (bijwerkingen) |
apply |
this |
Het object zelf | Eigenschappen instellen |