Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Sugerencia] Desafío 01: ¿Por qué Implementar Validaciones de Datos Aunque No se Soliciten?

Durante la resolución de los Desafíos de Lógica de Programación, me surgió una pregunta importante:

¿Deberíamos validar las entradas del usuario aunque el ejercicio no lo requiera explícitamente?

Mi respuesta es un , y aquí te explico por qué.

Código Original (Sin Validaciones)

// Enfoque básico del ejercicio
let nombre = prompt("Ingresa tu nombre:");
let edad = prompt("Ingresa tu edad:");

if (edad >= 18) {
    alert("Puedes obtener la licencia");
} else {
    alert("No puedes obtener la licencia");
}

Problemas Identificados

  1. Datos Vacíos: ¿Qué pasa si el usuario no ingresa nada?
  2. Datos Inválidos: ¿Y si ingresa texto en lugar de números?
  3. Cancelación: ¿Cómo manejamos cuando presiona "Cancelar"?
  4. Experiencia del Usuario: Sin feedback claro sobre errores

Mi Solución: Sistema de Validaciones

Arquitectura de Validación

He implementado un sistema modular compuesto por:

1. Validadores Específicos

/**
 * Valida si un texto no está vacío
 * @param {string} valor - Valor a validar
 * @returns {boolean} True si es válido
 */
function esTextoValido(valor) {
    return valor !== null && valor.trim() !== "";
}

/**
 * Valida si una edad es válida (1-150 años)
 * @param {string} edad - Edad como string
 * @returns {boolean} True si es válido
 */
function esEdadValida(edad) {
    const edadNum = parseInt(edad);
    return !isNaN(edadNum) && edadNum > 0 && edadNum <= 150;
}

/**
 * Valida formato de nombre (solo letras y espacios)
 * @param {string} nombre - Nombre a validar
 * @returns {boolean} True si es válido
 */
function esNombreValido(nombre) {
    if (!esTextoValido(nombre)) return false;
    
    const nombreLimpio = nombre.trim();
    const regex = /^[a-zA-ZáéíóúÁÉÍÓÚñÑ\s]{2,50}$/;
    return regex.test(nombreLimpio);
}

2. Función Genérica de Validación

/**
 * Solicita datos con validación automática y reintentos
 * @param {string} mensaje - Mensaje del prompt
 * @param {Function} validador - Función de validación
 * @param {string} mensajeError - Mensaje de error personalizado
 * @returns {string|null} Valor válido o null si se cancela
 */
function solicitarDatoConValidacion(mensaje, validador, mensajeError = "Dato inválido") {
    let valor;
    do {
        valor = prompt(mensaje);
        if (valor === null) return null; // Usuario canceló
        
        if (!validador(valor)) {
            alert(mensajeError);
        }
    } while (!validador(valor));
    
    return valor.trim();
}

3. Implementación en el Código

// Antes (vulnerable)
const nombre = prompt("Ingresa tu nombre:");

// Después (robusto)
const nombre = solicitarDatoConValidacion(
    "Por favor, ingresa tu nombre:",
    esNombreValido,
    "Por favor, ingresa un nombre válido (solo letras y espacios, 2-50 caracteres)."
);

if (nombre === null) {
    console.log("Usuario canceló la operación");
    return;
}

Mi Recomendación:

"Mejor validar de más que de menos. Es más fácil quitar validaciones que agregarlas después."

Lecciones Aprendidas

  • Piensa más allá del ejercicio: ¿Qué puede fallar?
  • La experiencia del usuario importa: Siempre
  • El código robusto ahorra tiempo: A largo plazo
  • Las validaciones son una inversión: No un costo
2 respuestas
solución!

Buen punto, también había pensado sobre eso, sin embargo, creí que al mencionarlo e implementarlo, algunos se confundirían por agregar conceptos mas avanzados.

¡Totalmente de acuerdo! Mantenerlo simple en este primer módulo ayuda mucho a entender la lógica sin distracciones. Quizás solo aclarar al inicio que el manejo de datos inválidos queda fuera del alcance. ¡Gracias por el comentario!