Kotlin Academy · Aula

Copiando com copy() e substituições parciais

Use copy() para criar instâncias modificadas sem alterar a original.

Aula 2 de 413 etapas

Copiando com copy() e substituições parciais é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 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.

Atualizações imutáveis com copy()

copy() cria uma nova instância de uma classe de dados com algumas propriedades modificadas. Todas as propriedades não especificadas mantêm seus valores originais.

copy() básico

Passe argumentos nomeados para substituir propriedades específicas.
data class Person(val name: String, val age: Int, val city: String)
val alice = Person("Alice", 30, "Berlin")
val olderAlice = alice.copy(age = 31)
println(olderAlice)  // Person(name=Alice, age=31, city=Berlin)

Copiando vários campos

Substitua quantos campos forem necessários.
data class Config(val host: String, val port: Int, val ssl: Boolean, val timeout: Int)
val prod = Config("prod.server", 443, true, 30)
val test = prod.copy(host = "test.server", port = 8080, ssl = false)
println(test)

copy não modifica o original

copy sempre cria um novo objeto. O original permanece completamente inalterado.
data class Point(val x: Int, val y: Int)
val origin = Point(0, 0)
val moved = origin.copy(x = 5)
println(origin)  // Point(x=0, y=0) — unchanged
println(moved)   // Point(x=5, y=0)

ressalva sobre cópia profunda

copy é superficial. Os objetos mutáveis dentro de uma classe de dados são compartilhados entre o original e a cópia.
data class Team(val name: String, val members: MutableList<String>)
val t1 = Team("A", mutableListOf("Alice"))
val t2 = t1.copy(name = "B")
t2.members.add("Bob")       // modifies SHARED list!
println(t1.members)  // [Alice, Bob] ← also changed!

Evitando problemas de cópia superficial

Use dados imutáveis dentro das classes de dados para evitar problemas de compartilhamento.
data class Team(val name: String, val members: List<String>)  // immutable list
val t1 = Team("A", listOf("Alice"))
val t2 = t1.copy(name = "B", members = t1.members + "Bob")
println(t1.members)  // [Alice]
println(t2.members)  // [Alice, Bob]

copy no gerenciamento de estado

copy é a maneira idiomática de atualizar o estado em arquiteturas no estilo Redux ou MVI.
data class UiState(val loading: Boolean, val items: List<String>, val error: String?)
fun reduce(state: UiState, action: Action) = when (action) {
    is Loading -> state.copy(loading = true)
    is Success -> state.copy(loading = false, items = action.data)
    is Error -> state.copy(loading = false, error = action.msg)
}

copy com parâmetros padrão

As classes de dados com muitas propriedades ainda têm um copy prático graças aos parâmetros nomeados.
data class Article(
    val id: Long, val title: String, val body: String,
    val published: Boolean = false, val views: Int = 0
)
val draft = Article(1L, "Hello", "Content...")
val published = draft.copy(published = true)
println(published.title)  // Hello

Usando copy em testes

copy facilita a criação de dados de teste — crie um objeto base e varie apenas os campos necessários.
val baseUser = User(id = 1, name = "Test", email = "test@test.com", active = true)
val inactiveUser = baseUser.copy(active = false)
val renamed = baseUser.copy(name = "Renamed")

copy versus padrão Builder

O copy() de uma classe de dados é a resposta do Kotlin ao padrão Builder. Para objetos complexos com muitos campos opcionais, classe de dados + copy é mais conciso.
// Java Builder:
User.builder().name("A").age(30).role("admin").build()
// Kotlin:
val u = User("A", 30, "admin")  // or copy from base

Semântica de registros

As classes de dados com propriedades val comportam-se como registros Java (JDK 16+) — imutáveis, baseadas em valor e exibidas automaticamente.
data class RGB(val r: Int, val g: Int, val b: Int)
val white = RGB(255, 255, 255)
println(white)  // RGB(r=255, g=255, b=255)

Verificação rápida

O que acontece com a instância original da classe de dados quando você chama copy() nela?

Recapitulação

copy() cria uma nova instância com campos substituídos — o original permanece inalterado. É excelente para gerenciamento de estado, testes e construção no estilo Builder. Tenha cuidado com cópias superficiais de propriedades mutáveis. A seguir: desestruturação!
Grátis para começar

Aprenda Kotlin com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Copiando com copy() e substituições parciais” é grátis?

Sim — o texto completo de “Copiando com copy() e substituições parciais” é 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 “Copiando com copy() e substituições parciais”?

Use copy() para criar instâncias modificadas sem alterar a original. 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 2 de 4.

Quanto tempo leva a aula “Copiando com copy() e substituições parciais”?

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. Noções básicas de data class: métodos gerados automaticamente
  2. Copiando com copy() e substituições parciais
  3. Declarações de desestruturação com componentN
  4. Data classes em coleções e como chaves de mapas
← Voltar para Kotlin Academy