SOLID y Clean CodeLección 5 de 5

Leer antes de cambiar

Practica: nombres que explican el dato

Revisa un ejercicio completo: colecciones, permisos, tiempos y funciones. Cambia los nombres sin cambiar lo que hace el código.

15 min aprox.4 pasosPráctica + comprobación
Qué aprenderás
  • Elegir nombres a partir del significado y la unidad del dato.
  • Mantener el comportamiento al cambiar nombres negativos.
  • Distinguir una duración de un instante y una función pendiente de una terminada.
Índice de esta lección

Paso 1

Empieza por los datos

Abre ejercicio_2.ts e intenta renombrarlo antes de mirar la propuesta. Hay varias respuestas válidas; cada nombre debe ayudar a entender qué contiene la variable.

users guarda objetos; userEmails guarda textos. En temperaturas, incluye la unidad. Para practicar sin datos personales, usa correos de ejemplo.

src/clean-code/ejercicio_2.ts
Paso 1 · typescript
const temperaturesCelsius = [33.6, 12.34];const serverIp = '123.123.123.123';const users = [{ id: 1, email: 'ana@example.com' }];const userEmails = users.map(user => user.email);

Qué deberías observar

La transformación conserva los valores y el orden de los correos.

Paso 2

Conserva el sentido de las condiciones

canJump, canRun e isLoading expresan preguntas concretas. Sus valores se mantienen.

Cambiar noTieneItems por hasItems invierte la pregunta. Invierte también el valor y revisa cada condición que lo use; cambiar true por false sin revisar los usos sí puede alterar el programa.

src/clean-code/ejercicio_2.ts
Paso 2 · typescript
const canJump = false;const canRun = true;const hasItems = false;const isLoading = false;if (!hasItems) console.log('Inventario vacío');

Qué deberías observar

El mensaje aparece en los mismos casos antes y después.

Paso 3

Distingue un instante de una duración

En el ejercicio, end contiene una resta. No es la hora de finalización: es el tiempo transcurrido.

Usa startedAtMs para el instante inicial y elapsedMs para la diferencia. Así el nombre explica tanto el significado como la unidad.

src/clean-code/ejercicio_2.ts
Paso 3 · typescript
const startedAtMs = new Date().getTime();// Se ejecuta el trabajo.const elapsedMs = new Date().getTime() - startedAtMs;

Qué deberías observar

Si el inicio es 1000 y la lectura final 1250, elapsedMs vale 250.

Paso 4

Nombra la promesa de cada función

getBooks y getBooksByUrl expresan una consulta; calculateSquareArea expresa un cálculo. Las funciones del ejercicio todavía lanzan un error: renombrarlas no las implementa.

Conserva printJobIfJobIsActive si la condición es parte del contrato. Acortarla a printJob podría ocultar que algunos trabajos se omiten. Los parámetros con _ están pendientes de uso; elimina ese prefijo al implementarlos.

src/clean-code/ejercicio_2.ts
Paso 4 · typescript
function getBooksByUrl(_url: string) {  throw new Error('Function not implemented.');}function calculateSquareArea(_side: number) {  throw new Error('Function not implemented.');}

Qué deberías observar

Los nombres explican la intención y las funciones siguen indicando que están pendientes.

Ahora te toca

Prueba la idea por tu cuenta

Renombra todas las variables y funciones de ejercicio_2.ts. Conserva sus valores y las funciones pendientes. Añade dos condiciones de prueba para inventario vacío y con objetos; ambas deben comportarse igual antes y después.

Necesito una pista

Revisa cada referencia al renombrar. Para noTieneItems puedes conservar la pregunta con hasNoItems o invertirla con hasItems y actualizar las condiciones.

Comparar con una solución

Una propuesta: temperaturesCelsius, serverIp, users, userEmails, canJump, canRun, hasItems, isLoading, startedAtMs, elapsedMs, getBooks, getBooksByUrl y calculateSquareArea. Mantén printJobIfJobIsActive si la condición es pública. Comprueba que noTieneItems === !hasItems para true y false. No implementes las funciones como parte de un simple renombrado.

Antes de seguir

Comprueba lo que aprendiste

No es una nota. Es una pausa para comprobar que la idea quedó clara.

1. ¿Qué representa Date.now() - startedAtMs?
2. Cambias noTieneItems por hasItems. ¿Cómo conservas if (noTieneItems)?

¿Terminaste la práctica?

Haz el ejercicio y comprueba tus respuestas antes de marcar la lección como completada.

Apuntes y código de esta lección