Leer antes de cambiar
Nombres que cuentan lo que hacen
Convierte abreviaturas ambiguas en una intención clara y comprueba qué datos devuelve tu función.
Qué aprenderás
- Nombrar datos según su significado y su unidad.
- Usar convenciones coherentes con el lenguaje y el equipo.
- Elegir entre transformar y seleccionar elementos.
Índice de esta lección
Paso 1
Nombra el concepto y su unidad
Un nombre debe reducir las preguntas que haces al leer. “elapsedDays” explica más que “d”; “discountRate” deja claro que el descuento es una proporción.
En estos ejercicios usamos inglés y lowerCamelCase en variables. Es una convención del proyecto, no una ley universal: otros lenguajes y equipos pueden tener convenciones distintas.
const elapsedDays = 23;const discountRate = 0.1;const maxClassesPerStudent = 6;Qué deberías observar
Puedes explicar cada dato sin buscar un comentario que traduzca su nombre.
Paso 2
Lee una selección de archivos
Antes y Después seleccionan los mismos archivos. El segundo ejemplo cuenta qué evaluamos, qué significa el booleano y qué contiene el resultado.
“id” es una abreviatura habitual y útil aquí. El problema no es que un nombre sea corto, sino que obligue a adivinar su significado.
const filesToEvaluate = [ { id: 1, isMarkedForDeletion: false }, { id: 2, isMarkedForDeletion: true }, { id: 3, isMarkedForDeletion: true },];const filesToDelete = filesToEvaluate.filter( (file) => file.isMarkedForDeletion,);Qué deberías observar
filesToDelete contiene los objetos con id 2 y 3, sin modificar el arreglo original.
Paso 3
Seleccionar no es transformar
filter conserva los elementos que cumplen la condición. map crea un resultado por cada elemento de entrada.
Si haces map de isMarkedForDeletion obtienes booleanos, no archivos. Corregir esa operación es un cambio de comportamiento; no lo confundas con renombrar variables.
const filesToDelete = filesToEvaluate.filter( (file) => file.isMarkedForDeletion,);// [{ id: 2, ... }, { id: 3, ... }]Qué deberías observar
La prueba comprueba los ids de los objetos seleccionados. Un arreglo de booleanos no cumple ese contrato.
Paso 4
Deja un contrato que se pueda probar
Extrae la selección a una función con un nombre que explique su resultado. Recibe los archivos por parámetro para probarla con distintos casos.
Evita sufijos redundantes por costumbre: “UserInterface” no siempre añade información a “User”. Sí conserva un detalle técnico cuando distingue una responsabilidad real, como un adaptador HTTP.
export type StudyFile = { id: number; isMarkedForDeletion: boolean;}; export const studyFiles: StudyFile[] = [ { id: 1, isMarkedForDeletion: false }, { id: 2, isMarkedForDeletion: true }, { id: 3, isMarkedForDeletion: true },]; export function getFilesToDelete(filesToEvaluate: StudyFile[]): StudyFile[] { return filesToEvaluate.filter((file) => file.isMarkedForDeletion);}Qué deberías observar
npm test verifica la selección, el caso vacío y que los datos de entrada no se modifiquen.
Ahora te toca
Prueba la idea por tu cuenta
Añade un cuarto archivo sin marcar y comprueba que no aparece en filesToDelete. Después marca todos los archivos y comprueba que aparecen los cuatro.
Necesito una pista
Cambia los datos de entrada, no la función. Usa los ids para comprobar qué objetos se seleccionaron.
Comparar con una solución
Con el archivo 4 sin marcar, el resultado sigue siendo [2, 3]. Al marcar los cuatro, el resultado contiene [1, 2, 3, 4]. La función sigue usando filter y conserva el arreglo original.
Antes de seguir
Comprueba lo que aprendiste
No es una nota. Es una pausa para comprobar que la idea quedó clara.
¿Terminaste la práctica?
Haz el ejercicio y comprueba tus respuestas antes de marcar la lección como completada.