> For the complete documentation index, see [llms.txt](https://amartyushov.gitbook.io/tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://amartyushov.gitbook.io/tech/programming-languages/kotlin/scope-functions.md).

# Scope functions

[Good overview about scopes and scope functions](https://typealias.com/start/kotlin-scopes-and-scope-functions/)

<figure><img src="/files/IljFo8FsMbILQd0gq1Fa" alt=""><figcaption></figcaption></figure>

## Shadowing and Implicit Receivers <a href="#shadowing-and-implicit-receivers" id="shadowing-and-implicit-receivers"></a>

```kotlin
class Person(val name: String) {
    fun sayHello() = println("Hello!")
}

class Dog(val name: String) {
    fun bark() = println("Ruff!")
}

val person = Person("Julia")
val dog = Dog("Sparky")

with(person) {
    with(dog) {
        println(name) // Prints Sparky from the dog object
        bark()        // Calls bark() on the dog object
        sayHello()    // Calls sayHello() on the person object
    }
}
```

<figure><img src="/files/PlIIQQH5VMX6RsICHBz9" alt=""><figcaption></figcaption></figure>

```kotlin
with(person) {
    with(dog) {
        println(this.name) // Prints Sparky
        this.bark()        // Calls bark() on the dog object
        this.sayHello()    // Compiler error - Unresolved reference: sayHello
    }
}
```

1. When using `this`, it will ***only*** refer to the exact implicit receiver in that scope.
2. When **omitting** `this`, the effective receiver is a **combination of the implicit receivers**, from the innermost to the outermost scope.
