Validação de dados em Kotlin: visão geral das bibliotecas e exemplos práticos
A validação de dados é um dos aspectos-chave do desenvolvimento de aplicações confiáveis. No ecossistema Kotlin, existem várias bibliotecas maduras que permitem descrever declarativamente as regras de verificação, poupando o desenvolvedor de código repetitivo. Neste artigo, examinaremos três ferramentas populares: Konform, Valiktor e Kotlinx Validation, além de discutir quando e qual ferramenta escolher.
1. Konform — validação funcional baseada em Arrow
A biblioteca Konform é construída sobre o framework funcional Arrow. Ela utiliza o conceito de Validated para acumular erros e suporta tanto estruturas de dados simples quanto aninhadas.
Instalação
// build.gradle.ktsimplementation("io.konform:konform:0.4.0")Exemplo de uso
import io.konform.validation.*
data class User( val name: String, val email: String, val age: Int)
val userValidation = Validation<User> { User::name { minLength(2) hint "O nome deve conter no mínimo 2 caracteres" maxLength(50) hint "O nome não deve exceder 50 caracteres" } User::email { pattern(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) hint "Email inválido" } User::age { minimum(18) hint "A idade deve ser de no mínimo 18 anos" maximum(120) hint "Informe uma idade real" }}
fun main() { val user = User("A", "invalid-email", 15) val result = userValidation(user) if (result.errors.isNotEmpty()) { result.errors.forEach { error -> println("Campo: ${error.path} — ${error.message}") } } else { println("Validação bem-sucedida") }}Características
- Integração total com Arrow para composição de validações
- Suporte para objetos aninhados e listas
- Construções DSL type-safe
- Acumulação de todos os erros (não para no primeiro)
2. Valiktor — validação imperativa com fluent API
Valiktor oferece uma abordagem mais tradicional usando uma interface fluente. A biblioteca não requer dependências funcionais e é fácil de aprender para desenvolvedores familiarizados com Java.
Instalação
implementation("org.valiktor:valiktor-core:0.12.0")Exemplo de uso
import org.valiktor.functions.*import org.valiktor.validate
data class Order( val id: String, val amount: Double, val items: List<String>)
fun validateOrder(order: Order) { validate(order) { validate(Order::id).isNotBlank().hasSize(10..36) validate(Order::amount).isPositive().isLessThanOrEqualTo(10000.0) validate(Order::items).isNotEmpty().hasSize(1..50) }}
fun main() { val order = Order("", -100.0, emptyList()) try { validateOrder(order) println("Pedido válido") } catch (e: Exception) { println("Erro de validação: ${e.message}") }}Características
- API simples e clara sem abstrações funcionais
- Lança exceção no primeiro erro (modo fail-fast)
- Suporte para validadores personalizados via extensões
- Fácil integração com projetos Java
3. Kotlinx Validation — biblioteca oficial da JetBrains
Embora o projeto Kotlinx Validation ainda esteja em fase experimental, ele já oferece uma abordagem interessante com anotações e reflexão, reminiscente do Javax Validation (Bean Validation).
Instalação
implementation("org.jetbrains.kotlinx:kotlinx-validation:0.1.0")Exemplo de uso
i Também na biblioteca
Registro para JavaScript (Node.js): melhores soluções e bibliotecas
FluentValidation para C# (.NET): guia completo com exemplos
Trabalhando com CSV em C++: bibliotecas e exemplos de código
Trabalhando com Apache Kafka em C++: biblioteca librdkafka e exemplos práticos
Envio de email em Kotlin: bibliotecas e exemplos de código