Kotlini versioonis 2.2 lisati eksperimentaalne tugi konteksti parameetritele (context parameter). Sarnane võimekus oli varasemalt eksperiment nimega "konteksti vastuvõtja" (context receiver). See tundub väga huvitav muutus, kuna pakub võimalusi kirjutada lühemat ja selgemat koodi.
Sõltuvusesüst
Konteksti parameetrid võimaldavad teha sõltuvusesüste ilma, et kasutatakse mingit eraldi raamistikku. Klassikaliselt kasutatakse selleks Springi poolt pakutavat Java peegeldamisel (reflection) toimivat lahendust. Kotlini poolt pakutavad konteksti parameetrid võimaldavad aga luua sõltuvused, mille olemasolu ja tüübikontroll tehakse juba koodi kompileerimise sammus. Seega on koodi kirjutamise hetkel juba näha, kui mõni sõltuvusesüst rikub ootusi kontekstile. Samuti on kontekste võimalik testimisel lihtsasti asendada.
Kasutamine
context(users: UserService)
fun outputMessage(message: String) {
// Uses log from the context
users.log("Log: $message")
}
fun main() {
val userService = UserService()
with(userService) {
outputMessage("Message")
}
}
Muutujate kaasaskandmine
Mõnikord on sügaval funktsioonide sees tarvis mingit infot, mida kõrgemal tasemel tegelikult ei vajata. Klassikaliselt kantakse seda infot parameetrina kogu kutsepinu sees kaasas. See aga risustab funktsioonide signatuuri ja juhib tähelepanu kõrvale tegelikult olulistest parameetritest. Konteksti parameetrid võimaldavad sellise lisainfo panna päringuga kaasa ning kasutada seda alles seal, kus tarvis. Aga nagu iga võimsa tööriistaga, tuleb ka siin kasutada kainet mõistust. Lihtsalt tervet maailma kontekstina kaasa panna ei ole ilmselt hea mõte, ning esmalt tuleks kaaluda ka teisi variante.
Domeenispetsiifiline keel (DSL)
Konteksti parameetrid võimaldavad kirjutada puhtamat süntaksit, kui kasutate enda defineeritud domeenispetsiifilist keelt. See võimaldab peita nii laiendus- kui ka infiksfunksioone kontekstide sisse, muutes nad kasutatavateks ainult õiges kontekstis.