Volver al 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.

El 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 qué está escrito así

  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.
Cómo probarlo

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

Ojo con esto

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.

Adaptalo a tu caso con IA

El botón copia este prompt con el código pegado debajo. Reemplazá los corchetes con lo tuyo y pegalo en ChatGPT, Claude, Gemini o Copilot.

El 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.

Ejemplo escrito y revisado a mano.

Compartir

Comentarios

Todavía no hay comentarios. El primero puede ser el tuyo.

Solo texto, sin enlaces. No se pide correo. Los comentarios se revisan antes de publicarse.

¿Lo adaptaste a algo tuyo?

Contame qué resolviste con esto, o qué le faltó.

Seguí probando

Más código

Ver todos
Darinel Ortega En línea · respondo durante el día
Hoy
Hola. Acá no vendo nada: esto es para intercambiar conocimiento sobre tecnología.
Escribime lo que quieras — podés mandar texto, imágenes o documentos. Los mensajes llegan a mi consola y te respondo desde ahí.
Estás escribiendo fuera de horario. Te leo apenas empiece el día.

Conversación abierta para compartir conocimiento. Los mensajes llegan a mi consola y respondo desde ahí.

Agendemos una conversación

Elegí el día y la hora que te sirvan. Son treinta minutos, sin agenda comercial.

Videollamada

Para una videollamada, pedila por acá y te paso el enlace de la sesión.