0Pricing
Kotlin Academy · Aula

apply e with: configurando e retornando

Use apply e with para configurar objetos e entenda seus valores de retorno.

apply e with: configurando e retornando é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

Recapitulação das funções de escopo

As funções de escopo do Kotlin (apply, also, let, run, with) permitem executar um bloco no contexto de um objeto. Cada uma difere pelo receptor (this versus it) e pelo valor retornado.

Noções básicas de apply

apply { ... } executa o bloco com this vinculado ao receptor e retorna o próprio receptor. É perfeito para configurar objetos.

class Person {
    var name: String = ""
    var age: Int = 0
}
fun main() {
    val p = Person().apply {
        name = "Ada"
        age = 35
    }
    println("${p.name}, ${p.age}")
}

Por que apply é útil

Sem apply, seria necessário usar uma variável temporária para configurar o objeto e depois retorná-lo. apply reduz isso a uma única expressão.

class Config {
    var host: String = ""
    var port: Int = 0
}
fun makeConfig(): Config {
    // Without apply:
    // val c = Config(); c.host = "x"; c.port = 8080; return c
    return Config().apply {
        host = "localhost"
        port = 8080
    }
}
fun main() {
    val c = makeConfig()
    println("${c.host}:${c.port}")
}

apply em uma cadeia

apply retorna o receptor, portanto pode ser encadeado naturalmente com outras chamadas de métodos.

class Builder {
    val parts = mutableListOf<String>()
}
fun main() {
    val result = Builder().apply {
        parts.add("hello")
        parts.add("world")
    }.parts.joinToString(" ")
    println(result) // hello world
}

Noções básicas de with

with(receiver) { ... } executa o bloco com this = receptor e retorna o resultado da lambda (NÃO o receptor). É útil quando você quer um valor derivado.

class Rect(val w: Int, val h: Int)
fun main() {
    val area = with(Rect(3, 4)) {
        w * h
    }
    println(area) // 12
}

apply versus with

apply retorna o receptor, sendo perfeito para construtores. with retorna o resultado da lambda, sendo perfeito para fazer cálculos a partir de um receptor.

class Box(var width: Int = 0, var height: Int = 0)
fun main() {
    val box = Box().apply { width = 10; height = 20 } // returns Box
    val area = with(box) { width * height }            // returns Int
    println("$box area=$area")
}

apply com listas

Configure uma coleção mutável diretamente no código.

fun main() {
    val list = mutableListOf<String>().apply {
        add("a")
        add("b")
        add("c")
    }
    println(list)
}

apply retorna o mesmo tipo

O tipo retornado por apply é sempre o tipo do receptor. Não é necessário um retorno explícito.

class Sb {
    private val buf = StringBuilder()
    fun append(s: String): Sb { buf.append(s); return this }
    fun build(): String = buf.toString()
}
fun main() {
    val s = Sb().apply {
        append("Hello, ")
        append("Kotlin!")
    }.build()
    println(s)
}

with reutilizando vários membros

Dentro de with, todos os membros do receptor estão no escopo — não é necessário o prefixo obj..

class Person(val name: String, val age: Int)
fun main() {
    val description = with(Person("Ada", 35)) {
        "Name: $name, Age: $age, AgeNext: ${age + 1}"
    }
    println(description)
}

apply aninhado

Você pode aninhar apply dentro de outro apply para realizar uma configuração hierárquica. Use com moderação.

class Address {
    var city: String = ""
    var zip: String = ""
}
class User {
    var name: String = ""
    var address: Address = Address()
}
fun main() {
    val u = User().apply {
        name = "Ada"
        address.apply {
            city = "Istanbul"
            zip = "34000"
        }
    }
    println("${u.name} in ${u.address.city}")
}

Quando NÃO usar apply

Se não precisar retornar o receptor, prefira uma construção simples com argumentos nomeados ou let/run. Não use apply apenas por variar.

class Config(val host: String, val port: Int)
fun main() {
    // Named arguments often beat builder + apply:
    val cfg = Config(host = "localhost", port = 8080)
    println("${cfg.host}:${cfg.port}")
}

Verificação rápida

O que apply retorna depois de executar seu bloco?

Recapitulação

apply executa um bloco com this = receptor e retorna o receptor — perfeito para configurar objetos. with executa um bloco com this = receptor e retorna o resultado da lambda — perfeito para valores derivados. Use argumentos nomeados quando a configuração for simples.

Perguntas Frequentes

A aula “apply e with: configurando e retornando” é grátis?

Sim — o texto completo de “apply e with: configurando e retornando” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “apply e with: configurando e retornando”?

Use apply e with para configurar objetos e entenda seus valores de retorno. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “apply e with: configurando e retornando”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. apply e with: configurando e retornando
  2. let e run: transformando e delimitando o escopo
  3. also: efeitos colaterais sem alterar o receptor
  4. Escolhendo a função de escopo certa: guia de decisão
← Voltar para Kotlin Academy