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.
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í
- buildList arma la lista mientras se evalúan las reglas: cada if agrega su error sin cortar las demás.
- Cada error dice a qué campo pertenece, así la pantalla puede pintarlo junto al campo correcto.
- r.edad !in 18..120 se lee como se dice: "la edad no está entre 18 y 120".
- La data class da gratis la igualdad y el texto legible, útil para probar.
Pegalo en play.kotlinlang.org o guardalo como validar.kt y corré: kotlinc validar.kt -include-runtime -d v.jar && java -jar v.jar
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.
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.
Comentarios
Todavía no hay comentarios. El primero puede ser el tuyo.
¿Lo adaptaste a algo tuyo?
Contame qué resolviste con esto, o qué le faltó.