Validação de dados em Kotlin: visão geral das bibliotecas e exemplos práticos
A validação de dados é um dos principais aspectos do desenvolvimento de aplicações confiáveis. No ecossistema Kotlin, existem várias bibliotecas poderosas que permitem descrever regras de validação de forma declarativa, evitando construções condicionais complexas. Neste artigo, veremos três ferramentas populares: Konad, Valiktor e Kvalidation. Você aprenderá como elas funcionam e verá exemplos de código para tarefas reais.
1. Konad — validação funcional
Konad (Kotlin Validation) utiliza o conceito de mônadas e programação funcional. Em vez de lançar exceções, a biblioteca retorna Validated<E, A>, onde E é o tipo de erro e A é o valor de sucesso. Isso permite acumular erros e tratá-los sem efeitos colaterais.
Instalação
// build.gradle.ktsdependencies { implementation("io.github.mkobit:konad:0.3.0")}Exemplo de uso
import konad.*
data class User(val name: String, val age: Int)
fun validateUser(user: User): Validated<String, User> { return Validated.valid(user) .validate { it.name.isNotBlank() } { "O nome não pode estar em branco" } .validate { it.age in 18..99 } { "A idade deve estar entre 18 e 99" }}
fun main() { val user = User("Alice", 25) val result = validateUser(user)
when (result) { is Valid -> println("Usuário válido: ${result.value}") is Invalid -> println("Erros: ${result.errors.joinToString(", ")}") }}Vantagens do Konad:
- Estilo funcional puro sem exceções
- Acumulação de todos os erros de validação
- Composição de validadores
2. Valiktor — validação declarativa com fluent API
Valiktor oferece uma DSL intuitiva para descrever regras. A biblioteca suporta objetos aninhados, coleções e mensagens de erro personalizadas. É uma das ferramentas mais populares para Kotlin.
Instalação
// build.gradle.ktsdependencies { implementation("org.valiktor:valiktor-core:0.12.0")}Exemplo com objetos aninhados
import org.valiktor.*import org.valiktor.functions.*
data class Address(val city: String, val zip: String)data class Person(val name: String, val email: String, val address: Address)
fun validatePerson(person: Person) { validate(person) { validate(Person::name).isNotBlank().hasSize(min = 2, max = 50) validate(Person::email).isEmail() validate(Person::address) { validate(Address::city).isNotBlank() validate(Address::zip).matches("\\\\d{5}".toRegex()) } }}
fun main() { val person = Person("", "email-inválido", Address("", "123")) try { validatePerson(person) } catch (e: ConstraintViolationException) { e.constraintViolations.forEach { violation -> println("${violation.property}: ${violation.message}") } }}Características do Valiktor:
- Suporte completo para objetos aninhados e listas
- Mensagens de erro localizadas
- Integração com Spring Boot e Ktor
3. Kvalidation — validação modular baseada em anotações
Kvalidation (anteriormente Koptional) oferece tanto uma abordagem baseada em anotações quanto programática. A biblioteca é especialmente útil para validar dados de entrada em APIs REST.
Instalação
// build.gradle.ktsdependencies { implementation("com.willowtreeapps:kvalidation:1.0.0")}Exemplo com anotações
import com.willowtreeapps.kvalidation.annotations.*import com.willowtreeapps.kvalidation.Validator
data class Product( @field:NotBlank(message = "Pro Também na biblioteca
Internacionalização (i18n) em Go (Golang): Guia Completo
Geração de PDF em PHP: visão geral das bibliotecas e exemplos de código
Programação Reativa em Kotlin: Biblioteca RxKotlin e Corrotinas
Configuração de aplicações C++: bibliotecas e ferramentas para personalização flexível