Límite de Caracteres - FreeCodeCamp Desafío Diario
Introducción
Este problema del desafío diario de FreeCodeCamp nos presenta un caso típico en el desarrollo web: validar la longitud del contenido antes de publicarlo en redes sociales. Es un ejercicio perfecto para practicar estructuras condicionales y lógica de validación.
Enunciado del Problema
En este desafío, se te proporciona una cadena de texto y debes determinar si es apropiada para una publicación en redes sociales. La función debe retornar uno de estos tres mensajes según las reglas establecidas:
| Condición | Resultado |
|---|---|
longitud ≤ 40 | "short post" |
40 < longitud ≤ 80 | "long post" |
longitud > 80 | "invalid post" |
Ejemplos de uso
canPost('Hola mundo') // "short post" (10 caracteres)
canPost('Este es un mensaje de longitud media para redes sociales') // "long post" (63 caracteres)
canPost('Este mensaje es extremadamente largo y supera los límites establecidos para las publicaciones en redes sociales modernas') // "invalid post" (132 caracteres)Análisis del Problema
Antes de codificar, analicemos los casos:
- Caso base: Mensajes cortos (≤ 40 caracteres) son válidos
- Caso intermedio: Mensajes medianos (41-80 caracteres) son aceptables pero largos
- Caso límite: Mensajes excesivamente largos (> 80 caracteres) no son válidos
Flujo de decisión
flowchart TD
A[Inicio: recibir mensaje] --> B[Calcular length = mensaje.length]
B --> C{¿length ≤ 40?}
C -->|Sí| D[Retorna 'short post']
C -->|No| E{¿length ≤ 80?}
E -->|Sí| F[Retorna 'long post']
E -->|No| G[Retorna 'invalid post']
D --> H[Fin]
F --> H
G --> H
Solución Implementada
Mi enfoque utiliza el operador ternario para crear una solución concisa y elegante:
function canPost(message) {
// Calculamos la longitud una sola vez para mejor legibilidad
const length = message.length
// Operador ternario anidado: evaluación de izquierda a derecha
return length <= 40
? 'short post'
: length <= 80
? 'long post'
: 'invalid post'
}¿Por qué usar el operador ternario?
- Concisión: Toda la lógica en una sola expresión
return - Legibilidad: Flujo lógico claro de izquierda a derecha
- Funcional: Se comporta como una expresión, no como declaraciones
- Complejidad temporal: - Solo accedemos a la propiedad
length
:::tip Operador Ternario Anidado El operador ternario condición ? valor1 : valor2 se puede anidar para manejar múltiples casos. La evaluación se realiza de izquierda a derecha, y se detiene en cuanto encuentra una condición verdadera. :::
Alternativas de Implementación
Usando if/else if/else tradicional
function canPostTraditional(message) {
const length = message.length
// Estructura condicional tradicional
if (length <= 40) {
return 'short post'
}
else if (length <= 80) {
return 'long post'
}
else {
return 'invalid post'
}
}Ventajas del if/else if/else:
- Más familiar para principiantes
- Fácil de debuggear con breakpoints
- Permite lógica adicional en cada bloque
Con validación de entrada
function canPostRobust(message) {
// Validación de entrada
if (typeof message !== 'string') {
throw new TypeError('El parámetro debe ser una cadena de texto')
}
const length = message.length
return length <= 40
? 'short post'
: length <= 80
? 'long post'
: 'invalid post'
}Casos de Prueba
// Casos de borde
console.log(canPost('')) // "short post" (0 caracteres)
console.log(canPost('a'.repeat(40))) // "short post" (exactamente 40)
console.log(canPost('a'.repeat(41))) // "long post" (41 caracteres)
console.log(canPost('a'.repeat(80))) // "long post" (exactamente 80)
console.log(canPost('a'.repeat(81))) // "invalid post" (81 caracteres)Conclusión
Este desafío ilustra conceptos fundamentales de programación:
- Estructuras condicionales para manejar múltiples casos
- Validación de datos antes del procesamiento
- Optimización de código mediante variables auxiliares
- Casos de borde que debemos considerar al diseñar soluciones
La solución es simple pero efectiva, demostrando que no siempre necesitamos algoritmos complejos para resolver problemas reales de desarrollo web.
Conceptos Aprendidos
- Uso de
string.lengthpara obtener la longitud de cadenas - Estructuras
condicionalespara múltiples condiciones - Importancia del orden en las evaluaciones condicionales
- Práctica de casos de borde en validación de entrada