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.
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.
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
- 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.
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.
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.
Comentários
Ainda não há comentários. O primeiro pode ser o seu.
Adaptou para algo seu?
Me conte o que resolveu com isto, ou o que faltou.