Kotlin Academy · Aula

Casos de Uso

Modelagem de domínio

Aula 3 de 413 etapas

Casos de Uso é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 3 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.

Modelando o domínio

As classes de valor são excelentes para a modelagem de domínio. Elas transformam tipos primitivos anônimos em tipos significativos e à prova de erros, sem custo durante a execução.

Vamos analisar cenários realistas.

Identificadores tipados

Tipos distintos de ID evitam passar um identificador de usuário onde deveria estar um identificador de pedido — um erro comum e dispendioso.

@JvmInline
value class UserId(val value: Long)
@JvmInline
value class OrderId(val value: Long)

fun fetchUser(id: UserId) = "user " + id.value

fun main() {
    println(fetchUser(UserId(7)))
}

Unidades de medida

Encapsular números em tipos de unidades impede que você some metros a segundos por acidente e documenta o significado.

@JvmInline
value class Kilograms(val value: Double)

fun describe(weight: Kilograms) = weight.value.toString() + " kg"

fun main() {
    println(describe(Kilograms(72.5)))
}

Strings validadas

Combine uma classe de valor com um bloco init para garantir invariantes, como um endereço de e-mail não vazio.

@JvmInline
value class Email(val value: String) {
    init {
        require(value.contains("@")) { "invalid email" }
    }
}

fun main() {
    println(Email("a@b.com").value)
}

Dinheiro com comportamento

Represente o dinheiro na menor unidade e adicione operações, evitando erros de ponto flutuante com moedas.

@JvmInline
value class Cents(val value: Long) {
    operator fun plus(other: Cents) = Cents(value + other.value)
    fun format() = "$" + value / 100.0
}

fun main() {
    val total = Cents(1500) + Cents(250)
    println(total.format())
}

APIs autodocumentadas

Uma assinatura de função com classes de valor é muito mais clara do que uma com três números inteiros soltos.

@JvmInline
value class Width(val px: Int)
@JvmInline
value class Height(val px: Int)

fun area(w: Width, h: Height) = w.px * h.px

fun main() {
    println(area(Width(4), Height(5)))
}

Encapsulando dados sensíveis

Uma classe de valor pode substituir toString para mascarar segredos nos registros, mantendo o valor bruto acessível.

@JvmInline
value class Token(val value: String) {
    override fun toString() = "Token(***)"
}

fun main() {
    val t = Token("abc123")
    println(t)          // masked
    println(t.value)    // real value when needed
}

Impondo intervalos

Use classes de valor para concentrar as regras de intervalo em um único lugar, de modo que estados inválidos não possam ser construídos em nenhum ponto.

@JvmInline
value class Rating(val stars: Int) {
    init {
        require(stars in 1..5) { "stars must be 1..5" }
    }
}

fun main() {
    println(Rating(4).stars)
}

Construtores inteligentes

Associe uma classe de valor a uma fábrica companheira que retorna null para uma entrada inválida, evitando exceções para falhas esperadas.

@JvmInline
value class Age(val value: Int) {
    companion object {
        fun of(n: Int): Age? = if (n in 0..150) Age(n) else null
    }
}

fun main() {
    println(Age.of(30)?.value)
    println(Age.of(-5))
}

Resumo dos padrões

Padrões comuns de classes de valor:

  • IDs tipados para evitar confusões
  • Unidades de medida
  • Tipos primitivos validados com init
  • Operações de domínio por meio de operadores
  • Valores sensíveis mascarados

Segurança de baixo custo

Como as classes de valor geralmente são embutidas, você obtém toda essa clareza e segurança de domínio praticamente sem custo durante a execução. Elas são uma forma simples de tornar estados ilegais impossíveis de representar.

Verificação rápida

Teste sua compreensão sobre casos de uso de classes de valor.

Recapitulação

Você viu casos de uso práticos das classes de valor:

  • IDs tipados, unidades e strings validadas
  • Dinheiro e operações de domínio
  • Mascaramento de segredos e construtores inteligentes

A seguir: as limitações das classes de valor.

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 “Casos de Uso” é grátis?

Sim — o texto completo de “Casos de Uso” é 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 “Casos de Uso”?

Modelagem de domínio 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 3 de 4.

Quanto tempo leva a aula “Casos de Uso”?

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. Apelidos de Tipos
  2. Classes de Valor Embutidas
  3. Casos de Uso
  4. Limitações
← Voltar para Kotlin Academy