Kotlin with

Kotlin with is a function which accepts a receiver object and has a block of code. In this block of code, receiver’s properties and methods can be accessed without actually referring to the object.

Kotlin with can make the code concise and look readable.

Example

In the following example, we will pass a String value for receiver object to with() and access the properties and functions of the String in the block.

Main.kt

</>
Copy
fun main(args: Array<String>) {
    val str = "Hello World!"
    with (str) {
        println(length)
        println(uppercase())
    }
}

Output

12
HELLO WORLD!

Inside the with-block, we have accessed length property and called uppercase() function of the receiver object str, with actually referencing the object str again like str.length or str.uppercase().

Access Receiver Itself in With-Block

To access receiver itself in the with-block, use this keyword.

Main.kt

</>
Copy
fun main(args: Array<String>) {
    val str = "Hello World!"
    with (str) {
        print(this)
    }
}

Output

Hello World!

Return Value from With-Block

We can return a value from with-block. Just place the return value as the last statement in the with-block.

In the following example, we will return lowercase value of the String from with-block.

Main.kt

</>
Copy
fun main(args: Array<String>) {
    val str = "Hello World!"
    val result = with (str) {
        //some code
        lowercase()
    }
    println(result)
}

Output

hello world!

Now, let us return length of the receiver object str from the with-block.

Main.kt

</>
Copy
fun main(args: Array<String>) {
    val str = "Hello World!"
    val result = with (str) {
        //some code
        length
    }
    println("Returned Value: " + result)
}

Output

Returned Value: 12

Conclusion

In this Kotlin Tutorial, we learned what a Kotlin with function is, and how to use this to create a scope (with-block) for an object (receiver) and access its members and functions.