Validação de dados em Kotlin: visão geral de bibliotecas e exemplos práticos
A validação de dados é um dos aspectos-chave no desenvolvimento de aplicações confiáveis. Em Kotlin, graças à sua sintaxe concisa e sistema de tipos poderoso, o processo de verificação de dados pode ser não apenas eficiente, mas também expressivo. Neste artigo, veremos bibliotecas populares para validação, suas capacidades e forneceremos exemplos práticos de código.
Por que a validação é necessária em Kotlin?
A validação permite:
- Garantir a integridade dos dados antes do processamento;
- Melhorar a experiência do usuário com mensagens de erro claras;
- Reduzir a carga no banco de dados e na lógica do servidor;
- Prevenir vulnerabilidades relacionadas a entradas incorretas.
Principais abordagens para validação
Em Kotlin, podemos destacar três abordagens principais:
- Anotações — forma declarativa, frequentemente usada com Jakarta Bean Validation (anteriormente JSR-380).
- Validação com DSL — criação de validadores usando uma linguagem específica de domínio (ex.: Konform).
- Abordagem funcional — uso de funções de ordem superior para composição de regras de verificação.
1. Biblioteca Konform
Konform é uma biblioteca leve para validação de dados em Kotlin que utiliza DSL. Ela é ideal para verificar objetos obtidos de JSON ou formulários.
Exemplo de uso:
import konform.*import konform.dsl.*
data class User( val name: String, val email: String, val age: Int)
fun main() { val userValidator = validation<User> { User::name required { minLength(2) hint "O nome deve ter no mínimo 2 caracteres" maxLength(50) hint "O nome não deve exceder 50 caracteres" } User::email required { pattern(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) hint "Email inválido" } User::age required { range(18..120) hint "A idade deve estar entre 18 e 120 anos" } }
val user = User("A", "invalid-email", 17) val result = userValidator.validate(user) if (result is ValidationResult.Invalid) { result.errors.forEach { (field, errors) -> println("Campo '$field': ${errors.joinToString(", ")}") } } else { println("Validação aprovada!") }}Saída:
Campo 'name': O nome deve ter no mínimo 2 caracteresCampo 'email': Email inválidoCampo 'age': A idade deve estar entre 18 e 120 anos2. Biblioteca Kotlin Validation (KValidation)
KValidation é outra ferramenta popular que oferece tanto anotações quanto DSL. Ela se integra com Kotlin Serialization e suporta objetos aninhados.
Exemplo com anotações:
import io.kvalidation.annotations.*import io.kvalidation.KValidation
@Validatabledata class Address( @NotEmpty(message = "A rua não pode estar vazia") val street: String, @Range(min = 1, max = 9999, message = "O número da casa deve estar entre 1 e 9999") val houseNumber: Int)
@Validatabledata class Person( @NotEmpty(message = "O nome é obrigatório") @Length(min = 2, max = 100, message = "O nome deve ter entre 2 e 100 caracteres") val name: String, @Email(message = "Email inválido") val email: String, @Valid // validação aninhada val address: Address)
fun main() { val person = Person("", "test", Address("", 0)) val violations = KValidation.validate(person) violations.forEach { violation -> println("${violatio Também na biblioteca
Cache em PHP: Redis, Memcached e APCu — guia completo
Validação de dados em C++: bibliotecas e métodos (libvalidate, nlohmann/json, Boost)
Geração Swagger/OpenAPI para C++: melhores ferramentas e bibliotecas
Envio de SMS em JavaScript (Node.js): API, bibliotecas e exemplos de código