Voltar ao código Kotlin

Validar un formulario y devolver todos los errores juntos

Una función que revisa todos los campos y devuelve la lista completa de problemas, no solo el primero.

Este post ainda não está no seu idioma; você o vê em espanhol. O código é o mesmo.

O problema

Un formulario que avisa de a un error por vez obliga a enviar cinco veces. Hay que validar todo y contestar con la lista completa.

Kotlin
sealed class Validacion {
    object Ok : Validacion()
    data class Error(val campo: String, val motivo: String) : Validacion()
}

data class Registro(val nombre: String, val correo: String, val edad: Int)

fun validar(r: Registro): List<Validacion.Error> = buildList {
    if (r.nombre.isBlank()) add(Validacion.Error("nombre", "es obligatorio"))
    if (!Regex("^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$").matches(r.correo)) add(Validacion.Error("correo", "no parece un correo"))
    if (r.edad !in 18..120) add(Validacion.Error("edad", "debe estar entre 18 y 120"))
}

fun main() {
    val errores = validar(Registro("", "ana@ejemplo", 17))
    if (errores.isEmpty()) println("Registro válido")
    else errores.forEach { println("${it.campo}: ${it.motivo}") }
}

Por que está escrito assim

  1. buildList arma la lista mientras se evalúan las reglas: cada if agrega su error sin cortar las demás.
  2. Cada error dice a qué campo pertenece, así la pantalla puede pintarlo junto al campo correcto.
  3. r.edad !in 18..120 se lee como se dice: "la edad no está entre 18 y 120".
  4. La data class da gratis la igualdad y el texto legible, útil para probar.
Como testar

Pegalo en play.kotlinlang.org o guardalo como validar.kt y corré: kotlinc validar.kt -include-runtime -d v.jar && java -jar v.jar

Atenção

Esta validación es de formato. Que el correo exista o que no esté ya registrado se comprueba en el servidor, y siempre en el servidor aunque también se valide en la app.

Adapte ao seu caso com IA

O botão copia este prompt com o código colado abaixo. Substitua os colchetes pelo que é seu e cole no ChatGPT, Claude, Gemini ou Copilot.

O prompt
Tengo esta validación de formulario en Kotlin que devuelve todos los errores juntos. Adaptala a mi formulario, que tiene estos campos y reglas: [CAMPOS Y REGLAS]. Agregá reglas que dependen de dos campos a la vez (por ejemplo [REGLA CRUZADA]) y mensajes listos para mostrar en [IDIOMA]. Que siga devolviendo la lista completa, no el primer error.

Exemplo escrito e revisado à mão.

Compartilhar

Comentários

Ainda não há comentários. O primeiro pode ser o seu.

Apenas texto, sem links. Não pedimos e-mail. Os comentários são revisados antes de serem publicados.

Adaptou para algo seu?

Me conte o que resolveu com isto, ou o que faltou.

Continue testando

Mais código

Ver todos
Darinel Ortega Online · respondo ao longo do dia
Hoje
Olá. Aqui eu não vendo nada: isto é para trocar conhecimento sobre tecnologia.
Escreva o que quiser — pode mandar texto, imagens ou documentos. As mensagens chegam ao meu console e eu respondo por lá.
Você está escrevendo fora do horário. Eu leio assim que o dia começar.

Conversa aberta para compartilhar conhecimento. As mensagens chegam ao meu console e eu respondo por lá.

Vamos marcar uma conversa

Escolha o dia e a hora que funcionem para você. Trinta minutos, sem discurso comercial.

Videochamada

Para uma videochamada, peça por aqui que eu te mando o link da sessão.