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.