Wywołanie kilku metod na obiekcie z <samp>with</samp>
Klasyczna sytuacja w kodzie. Mamy sobie jakiś obiekt i chcemy wywołać na nim kilka metod po kolei.
Listing 1. Kod typowy do bólu
fun main(args: Array<String>) {
val donatello = Turtle();
donatello.penDown()
for (i in 1..4) {
donatello.forward(100.0)
donatello.turn(90.0)
}
donatello.penUp()
}
i w ten sposób mamy tu inwazję zmutowanych żółwi ninja. Pomijając już kropkozę oraz zaciemnianie kodu przez ciągłe użycie jednej zmiennej to wygląda to jako tako. Twórcy Kotlina zauważyli jednak, że w takich przypadkach można uprościć zapis wprowadzając blok-kontekst. Robi się to za pomocą słowa with.
Listing 1. Kod z użyciem with
fun main(args: Array<String>) {
val donatello = Turtle();
with(donatello) {
penDown()
for (i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
}
Co tu się dzieje? with jest tak naprawdę funkcją inline, która przyjmuje jako pierwszy parametr pewien obiekt i wykonuje na nim blok kodu przekazany jako drugi parametr. O funkcjach inline będzie jeszcze mowa w przyszłości. Na razie jest to przykład ich zastosowania w celu uproszczenia kodu.