Clean JavaScript

Aprende a aplicar Clean Code, SOLID & Unit Testing

Clean JavaScript


Recomendado por referentes

Otras opiniones no solicitadas 

Una imagen vale más que mil palabras

Sobre el libro

JavaScript se ha convertido en uno de los lenguajes más utilizados del mundo, se encuentra en infraestructuras críticas de empresas muy importantes (Facebook, Netflix o Uber lo utilizan). Por esta razón, se ha vuelto indispensable la necesidad de escribir código de mayor calidad y legibilidad.

Los desarrolladores, por norma general, solemos escribir código sin la intención explícita de que vaya a ser entendido por otra persona, ya que la mayoría de las veces nos centramos simplemente en implementar una solución que funcione y que resuelva el problema. La mayoría de las veces, tratar de entender el código de un tercero o incluso el que escribimos nosotros mismos hace tan solo unas semanas, se puede volver una tarea realmente difícil.

Este libro pretende ser una referencia concisa de cómo aplicar clean code, SOLID, unit testing y TDD, para aprender a escribir código JavaScript más legible, mantenible, seguro y tolerante a cambios. En este encontrarás múltiples referencias a otros autores y ejemplos sencillos que, sin duda, te ayudarán a encontrar el camino para convertirte en un mejor desarrollador.

Tabla de contenidos

  • Prefacio
    • Qué no es este libro
  • Agradecimientos
  • Sobre Software Crafters
  • Sobre el autor
  • Introducción
  • Deuda técnica
    • Tipos de deuda
    • Refactoring, las deudas se pagan
    • Mejor prevenir que curar, las reglas del diseño simple
  • SECCIÓN I: CLEAN CODE
  • ¿Qué es Clean Code?
  • Variables, nombres y ámbito
    • Uso correcto de var, let y const
    • Nombres pronunciables y expresivos
    • Ausencia de información técnica en los nombres
    • Establecer un lenguaje ubicuo
    • Nombres según el tipo de dato
      • Arrays
      • Booleanos
      • Números
      • Funciones
      • Clases
    • Ámbito o scope de las variables
      • Ámbito global
      • Ámbito de bloque
      • Ámbito estático vs. dinámico
      • Hoisting
  • Funciones
    • Declaración de una función
    • Expresión de una función
    • Expresiones con funciones flecha (arrow functions)
      • Funcionamiento del objeto this en arrow functions
    • Funciones autoejecutadas IIFE
    • Parámetros y argumentos
      • Limita el número de argumentos
      • Parámetros por defecto
      • Parámetro rest y operador spread
    • Tamaño y niveles de indentación
      • Cláusulas de guarda
      • Evita el uso de else
      • Prioriza las condiciones asertivas
    • Estilo declarativo frente al imperativo
    • Funciones anónimas
    • Transparencia referencial
    • Principio DRY
    • Command–Query Separation (CQS)
    • Algoritmos eficientes
      • Notación O grande (big O)
  • Clases
    • Prototype y ECMAScript moderno
      • Constructores y funciones constructoras
      • Métodos
      • Herencia y cadena de prototipos
    • Tamaño reducido
    • Organización
    • Prioriza la composición frente a la herencia
  • Comentarios y formato
    • Evita el uso de comentarios
    • Formato coherente
      • Problemas similares, soluciones simétricas
      • Densidad, apertura y distancia vertical
      • Lo más importante primero
      • Indentación
  • SECCIÓN II: PRINCIPIOS SOLID
  • Introducción a SOLID
  • De STUPID a SOLID
    • ¿Qué es un code smell?
    • El patrón singleton
    • Alto acoplamiento
      • Acoplamiento y cohesión
    • Código no testeable
    • Optimizaciones prematuras
      • Complejidad esencial y complejidad accidental
    • Nombres poco descriptivos
    • Duplicidad de código
      • Duplicidad real
      • Duplicidad accidental
  • Principios SOLID al rescate
  • SRP - Principio de responsabilidad única
    • ¿Qué entendemos por responsabilidad?
    • Aplicando el SRP
    • Detectar violaciones del SRP:
  • OCP - Principio Abierto/Cerrado
    • Aplicando el OCP
    • Patrón adaptador
    • Detectar violaciones del OCP
  • LSP - Principio de sustitución de Liskov
    • Aplicando el LSP
    • Detectar violaciones del LSP
  • ISP - Principio de segregación de la interfaz
    • Aplicando el ISP
    • Detectar violaciones del ISP
  • DIP - Principio de inversión de dependencias
    • Módulos de alto nivel y módulos de bajo nivel
    • Depender de abstracciones
    • Inyección de dependencias
    • Aplicando el DIP
    • Detectando violaciones del DIP
  • SECCIÓN III: TESTING Y TDD
  • Introducción al testing
  • Tipos de tests de software
    • ¿Qué entendemos por testing?
    • Test manuales vs automáticos
    • Test funcionales vs no funcionales
      • Tests funcionales
      • Tests no funcionales
    • Pirámide de testing
      • Antipatrón del cono de helado
  • Tests unitarios
    • Características de los tests unitarios
    • Anatomía de un test unitario
  • Jest, el framework de testing JavaScript definitivo
    • Características
    • Instalación y configuración
    • Nuestro primer test
    • Aserciones
    • Organización y estructura
    • Gestión del estado: before y after
    • Code coverage
  • TDD - Test Driven Development
    • Las tres leyes del TDD
    • El ciclo Red-Green-Refactor
    • TDD como herramienta de diseño
    • Estrategias de implementación, de rojo a verde.
      • Implementación falsa
      • Triangular
      • Implementación obvia
    • Limitaciones del TDD
  • TDD Práctico: La kata FizzBuzz
    • Las katas de código
    • La kata FizzBuzz
    • Descripción del problema
    • Diseño de la primera prueba
    • Ejecutamos y… ¡rojo!
    • Pasamos a verde
    • Añadiendo nuevas pruebas
    • Refactorizando la solución, aplicando pattern matching.
  • Siguientes pasos
  • Referencias

Programar es el arte de
decirle a otra personas lo
que quieres que la
máquina haga

Happy Coding!

.