SlideShare una empresa de Scribd logo
1 de 32
Clean Code en Javascript
Workshop
Leonardo Micheloni
@leomicheloni
¿Quién soy?
• Leonardo Micheloni
• Programador +15
• Argentino
@leomicheloni
@leomicheloni
@leomicheloni
@leomicheloni
¿Por qué son importantes estos conceptos?
• Un framework / lenguaje / library no es más que una herramienta
• Se habla de ser bueno usando x pero no de ser buen programador
• Es cada vez más común mezclar tecnologías y herramientas
• Las aplicaciones evolucionan cada vez más rápido
• No siempre somos nosotros quienes comenzamos el código
@leomicheloni
"Any fool can write code that a computer
can understand. Good programmers
write code that humans can understand."
Martin Fowler
@leomicheloni
DRY
• Don’t repeat yourself principle
• Es similar a la normalización de bases de datos
• Copy + Paste oriented programming
• Hay más líneas de código para mantener
@leomicheloni
KISS
• Keep it simple stupid
• Hay un momento en nuestra evolución que nos gusta ser complicados
• La simplicidad es belleza
@leomicheloni
YAGNI
• You ain’t gonna need it
• Voy a hacer tal cosa por las dudas
• No se extremistas
@leomicheloni
SOLID
• Single responsability principle
• Un objeto tiene que tener un único motivo para cambiar
• Open close principle
• Una entidad debe ser abierta para su extensión pero cerrada para modificación
• Liskov sustitution principle
• En una jerarquía un hijo B tiene que ser intercambiable por su clase base
• Interface segregation principle
• Una cliente no debe ser forzado a implementar métodos que no usará
• Dependency inversion principle
• Un cliente debe depender de abstracciones
@leomicheloni
@leomicheloni
Code Smells
• Olores de código
• Indican que el código tiene potenciales problemas
• Para ser mantenido
• Para escalar
• Para evolucionar
• Es propenso a errores
@leomicheloni
Clean code: naming
• Deben ser claros en su intención
• Deben indicar responsabilidad única
• No deben tener prefijos o subfijos
• Las variables booleanas deben responder preguntas positivas
@leomicheloni
Clean code: Naming
• Smells
• AND OR IF
• El código tiene “side effects”
• Tipos de datos en el nombre
• Booleanos que no responden una pregunta
• Variables o métodos que no son simétricos
• Funciones con efectos secundarios no descriptos por su nombre
@leomicheloni
Clean Code: Naming
• Soluciones
• Verbalizar con un amigo
• O con un pato de goma
• Refactorizar hasta que el nombre sea “limpio”
@leomicheloni
Clean Code: Condicionales
• Comparar explícitamente
• Preferir comparaciones de positivas
• Usar condicionales positivos (evitar la doble negación)
• Asignar implícitamente
• Evitar “magic numbers”
• Evitar condicionales complejos
@leomicheloni
Clean Code: condicionales
• Smells
• Ser “antinegativo”
• Magic numbers
• Asignaciones de booleanos en condiciones
• Comentarios sobre una condición
• Condiciones difícil de comprender
@leomicheloni
Clean Code: condicionales
• Soluciones
• Siempre usar booleanos que respondan preguntas positivas
• Poner magic numbers en variables
• Crear funciones si la condición es una regla de negocio
• Utilizar variables intermedias
@leomicheloni
Clean Code: funciones
• Evitar Arrow Code
• Evitar funciones con demasiada responsabilidad
• Evitar funciones con efectos secundarios
• Evitar muchos argumentos
• Evitar funciones con flag arguments
@leomicheloni
Arrow code
• Identiación excesiva
• Complejo de comprender
• Complejo de modificar
@leomicheloni
Funciones con efectos secundario
• El nombre no denota intención
• Hay miedo a cambiarlas
• Son peligrosas
@leomicheloni
Funciones con mucha
responsabilidad
• Son difíciles de mantener
• Son difíciles de comprender
• Cambiar con mucha frecuencia
@leomicheloni
Clean code: funciones
• Smells
• Hay que hacer scroll para leerlas, vertical / horizontal
• Tienen demasiados parámetros
• Intención poco clara
• Cambian con mucha frecuencia
@leomicheloni
Clean Code: funciones
• Soluciones
• Guard clauses
• Fail fast
• Extract method
• Nuevas clases
• Rename
@leomicheloni
Clean Code: comentarios
• Pueden indicar que nuestro código no es claro
• Evitar comentarios obvios
• Evitar comentarios desactualizados
@leomicheloni
Clean Code: comentarios
• Smells
• Los comentarios son más grandes que el código
• El comentario dice lo mismo que el nombre de la función
• El comentario intenta explicar algo que el código debería
• El comentario indica miedo
@leomicheloni
Clean Code: soluciones
• Al escribir un comentario pensar por qué lo hacemos
• Cambiar la función / variable para que indique su intención
• Borrar comentarios en condiciones y extraer la condición
@leomicheloni
Refactor
• Cambiar el código sin modificar su comportamiento
• Hacerlo más legible
• Lo detectamos gracias a Code Smells, Patrones, DRY, etc.
• Aplicar algunos de los conceptos
• KISS
• DRY
• SOLID
• Baby steps
• El mejor refactor es el que quita código
@leomicheloni
@leomichelonihttp://itkidz.ie/wp-content/uploads/sites/15/2017/03/lets-code.png
Mind set
• Mirar el código
• No odiar
• Respect
• Baby steps
@leomicheloni
Mantenimiento
• Refactoring
• Baby steps
• No aceptar ventanas rotas
• Code reviews
• Pair programming
“Always leave the code you're editing a
little better than you found it.”
Robert C. Martin
@leomicheloni
Referencias
• https://github.com/leomicheloni/workshop-clean-code
• https://app.pluralsight.com/library/courses/writing-clean-code-humans
• https://www.amazon.es/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/
• https://www.amazon.es/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/
• https://github.com/ryanmcdermott/clean-code-javascript
• https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
• https://www.amazon.es/Code-Complete-Practical-Costruction-Professional/dp/0735619670/
• https://www.amazon.es/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/
• https://www.amazon.es/Head-First-Design-Patterns-Freeman/dp/0596007124/
• https://github.com/tcorral/Refactoring_Patterns
• https://www.youtube.com/watch?v=J18mLs-SRpI
@leomicheloni

Más contenido relacionado

Similar a Workshop clean code javascript

Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDTEdwin Cruz
 
Cómo Hacer una Auditoría de SEO on Page Increíble
Cómo Hacer una Auditoría de SEO on Page IncreíbleCómo Hacer una Auditoría de SEO on Page Increíble
Cómo Hacer una Auditoría de SEO on Page Increíblesemrush_webinars
 
Refactoring code smelss
Refactoring   code smelssRefactoring   code smelss
Refactoring code smelssGermán Küber
 
Functional programming Vol. 2
Functional programming Vol. 2Functional programming Vol. 2
Functional programming Vol. 2Gandhi Mena Salas
 
¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfatoRubén Bernárdez
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDLuis Alexander Aldazabal Gil
 
¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?Zinkdo
 
¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?Víctor Puig
 
SEO para Blogs - SEO para Mamás Blogueras en Berga Resort
SEO para Blogs - SEO para Mamás Blogueras en Berga ResortSEO para Blogs - SEO para Mamás Blogueras en Berga Resort
SEO para Blogs - SEO para Mamás Blogueras en Berga ResortRodrigo.Marketing
 
E-Commerce: optimización de ratio de conversión
E-Commerce: optimización de ratio de conversiónE-Commerce: optimización de ratio de conversión
E-Commerce: optimización de ratio de conversiónAlejandro Lembo
 
Auditoria blog de cyzone
Auditoria blog de cyzoneAuditoria blog de cyzone
Auditoria blog de cyzoneerosparedes
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simplepsluaces
 
Volviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareVolviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareDanijel Arsenovski
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID RefactorAgile Spain
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel Moral
 
Improving as a developer through code reviews
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviewsAnallely Olivares
 

Similar a Workshop clean code javascript (20)

Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDT
 
Cómo Hacer una Auditoría de SEO on Page Increíble
Cómo Hacer una Auditoría de SEO on Page IncreíbleCómo Hacer una Auditoría de SEO on Page Increíble
Cómo Hacer una Auditoría de SEO on Page Increíble
 
Refactoring code smelss
Refactoring   code smelssRefactoring   code smelss
Refactoring code smelss
 
Functional programming Vol. 2
Functional programming Vol. 2Functional programming Vol. 2
Functional programming Vol. 2
 
¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato¿A qué huele tu código? Afinando nuestro olfato
¿A qué huele tu código? Afinando nuestro olfato
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
 
Software Craftsmanship
Software CraftsmanshipSoftware Craftsmanship
Software Craftsmanship
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?
 
¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?¿Cómo poner a trabajar tus contenidos en el entorno digital?
¿Cómo poner a trabajar tus contenidos en el entorno digital?
 
SEO para Blogs - SEO para Mamás Blogueras en Berga Resort
SEO para Blogs - SEO para Mamás Blogueras en Berga ResortSEO para Blogs - SEO para Mamás Blogueras en Berga Resort
SEO para Blogs - SEO para Mamás Blogueras en Berga Resort
 
E-Commerce: optimización de ratio de conversión
E-Commerce: optimización de ratio de conversiónE-Commerce: optimización de ratio de conversión
E-Commerce: optimización de ratio de conversión
 
Auditoria blog de cyzone
Auditoria blog de cyzoneAuditoria blog de cyzone
Auditoria blog de cyzone
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
Volviendo a poner el “soft” en software
Volviendo a poner el “soft” en softwareVolviendo a poner el “soft” en software
Volviendo a poner el “soft” en software
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID Refactor
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
Improving as a developer through code reviews
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviews
 
Código Limpio
Código LimpioCódigo Limpio
Código Limpio
 

Más de Leonardo Micheloni

Más de Leonardo Micheloni (12)

Docker_K8S_lecciones_netcoreconf_2022.pdf
Docker_K8S_lecciones_netcoreconf_2022.pdfDocker_K8S_lecciones_netcoreconf_2022.pdf
Docker_K8S_lecciones_netcoreconf_2022.pdf
 
Docker dotnet netbaires
Docker dotnet netbairesDocker dotnet netbaires
Docker dotnet netbaires
 
2019 commit solid typescript
2019 commit solid typescript2019 commit solid typescript
2019 commit solid typescript
 
Docker Dotnet Málaga
Docker Dotnet MálagaDocker Dotnet Málaga
Docker Dotnet Málaga
 
Pipeline continuo con VSTS Azure DevOps
Pipeline continuo con VSTS Azure DevOpsPipeline continuo con VSTS Azure DevOps
Pipeline continuo con VSTS Azure DevOps
 
Docker for losers
Docker for losersDocker for losers
Docker for losers
 
Un viaje por Cosmos DB
Un viaje por Cosmos DBUn viaje por Cosmos DB
Un viaje por Cosmos DB
 
Cosmos db gab2018
Cosmos db gab2018Cosmos db gab2018
Cosmos db gab2018
 
Cosmos DB in a nutshell
Cosmos DB in a nutshellCosmos DB in a nutshell
Cosmos DB in a nutshell
 
Esp8266 iothub Azure data analysis in real time
Esp8266 iothub Azure data analysis in real timeEsp8266 iothub Azure data analysis in real time
Esp8266 iothub Azure data analysis in real time
 
Tdd y pair programming
Tdd y pair programmingTdd y pair programming
Tdd y pair programming
 
Blockchain, smart contracts y azure
Blockchain, smart contracts y azureBlockchain, smart contracts y azure
Blockchain, smart contracts y azure
 

Workshop clean code javascript

  • 1. Clean Code en Javascript Workshop Leonardo Micheloni @leomicheloni
  • 2. ¿Quién soy? • Leonardo Micheloni • Programador +15 • Argentino @leomicheloni @leomicheloni
  • 5. ¿Por qué son importantes estos conceptos? • Un framework / lenguaje / library no es más que una herramienta • Se habla de ser bueno usando x pero no de ser buen programador • Es cada vez más común mezclar tecnologías y herramientas • Las aplicaciones evolucionan cada vez más rápido • No siempre somos nosotros quienes comenzamos el código @leomicheloni
  • 6. "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." Martin Fowler @leomicheloni
  • 7. DRY • Don’t repeat yourself principle • Es similar a la normalización de bases de datos • Copy + Paste oriented programming • Hay más líneas de código para mantener @leomicheloni
  • 8. KISS • Keep it simple stupid • Hay un momento en nuestra evolución que nos gusta ser complicados • La simplicidad es belleza @leomicheloni
  • 9. YAGNI • You ain’t gonna need it • Voy a hacer tal cosa por las dudas • No se extremistas @leomicheloni
  • 10. SOLID • Single responsability principle • Un objeto tiene que tener un único motivo para cambiar • Open close principle • Una entidad debe ser abierta para su extensión pero cerrada para modificación • Liskov sustitution principle • En una jerarquía un hijo B tiene que ser intercambiable por su clase base • Interface segregation principle • Una cliente no debe ser forzado a implementar métodos que no usará • Dependency inversion principle • Un cliente debe depender de abstracciones @leomicheloni
  • 12. Code Smells • Olores de código • Indican que el código tiene potenciales problemas • Para ser mantenido • Para escalar • Para evolucionar • Es propenso a errores @leomicheloni
  • 13. Clean code: naming • Deben ser claros en su intención • Deben indicar responsabilidad única • No deben tener prefijos o subfijos • Las variables booleanas deben responder preguntas positivas @leomicheloni
  • 14. Clean code: Naming • Smells • AND OR IF • El código tiene “side effects” • Tipos de datos en el nombre • Booleanos que no responden una pregunta • Variables o métodos que no son simétricos • Funciones con efectos secundarios no descriptos por su nombre @leomicheloni
  • 15. Clean Code: Naming • Soluciones • Verbalizar con un amigo • O con un pato de goma • Refactorizar hasta que el nombre sea “limpio” @leomicheloni
  • 16. Clean Code: Condicionales • Comparar explícitamente • Preferir comparaciones de positivas • Usar condicionales positivos (evitar la doble negación) • Asignar implícitamente • Evitar “magic numbers” • Evitar condicionales complejos @leomicheloni
  • 17. Clean Code: condicionales • Smells • Ser “antinegativo” • Magic numbers • Asignaciones de booleanos en condiciones • Comentarios sobre una condición • Condiciones difícil de comprender @leomicheloni
  • 18. Clean Code: condicionales • Soluciones • Siempre usar booleanos que respondan preguntas positivas • Poner magic numbers en variables • Crear funciones si la condición es una regla de negocio • Utilizar variables intermedias @leomicheloni
  • 19. Clean Code: funciones • Evitar Arrow Code • Evitar funciones con demasiada responsabilidad • Evitar funciones con efectos secundarios • Evitar muchos argumentos • Evitar funciones con flag arguments @leomicheloni
  • 20. Arrow code • Identiación excesiva • Complejo de comprender • Complejo de modificar @leomicheloni
  • 21. Funciones con efectos secundario • El nombre no denota intención • Hay miedo a cambiarlas • Son peligrosas @leomicheloni
  • 22. Funciones con mucha responsabilidad • Son difíciles de mantener • Son difíciles de comprender • Cambiar con mucha frecuencia @leomicheloni
  • 23. Clean code: funciones • Smells • Hay que hacer scroll para leerlas, vertical / horizontal • Tienen demasiados parámetros • Intención poco clara • Cambian con mucha frecuencia @leomicheloni
  • 24. Clean Code: funciones • Soluciones • Guard clauses • Fail fast • Extract method • Nuevas clases • Rename @leomicheloni
  • 25. Clean Code: comentarios • Pueden indicar que nuestro código no es claro • Evitar comentarios obvios • Evitar comentarios desactualizados @leomicheloni
  • 26. Clean Code: comentarios • Smells • Los comentarios son más grandes que el código • El comentario dice lo mismo que el nombre de la función • El comentario intenta explicar algo que el código debería • El comentario indica miedo @leomicheloni
  • 27. Clean Code: soluciones • Al escribir un comentario pensar por qué lo hacemos • Cambiar la función / variable para que indique su intención • Borrar comentarios en condiciones y extraer la condición @leomicheloni
  • 28. Refactor • Cambiar el código sin modificar su comportamiento • Hacerlo más legible • Lo detectamos gracias a Code Smells, Patrones, DRY, etc. • Aplicar algunos de los conceptos • KISS • DRY • SOLID • Baby steps • El mejor refactor es el que quita código @leomicheloni
  • 30. Mind set • Mirar el código • No odiar • Respect • Baby steps @leomicheloni
  • 31. Mantenimiento • Refactoring • Baby steps • No aceptar ventanas rotas • Code reviews • Pair programming “Always leave the code you're editing a little better than you found it.” Robert C. Martin @leomicheloni
  • 32. Referencias • https://github.com/leomicheloni/workshop-clean-code • https://app.pluralsight.com/library/courses/writing-clean-code-humans • https://www.amazon.es/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/ • https://www.amazon.es/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/ • https://github.com/ryanmcdermott/clean-code-javascript • https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 • https://www.amazon.es/Code-Complete-Practical-Costruction-Professional/dp/0735619670/ • https://www.amazon.es/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ • https://www.amazon.es/Head-First-Design-Patterns-Freeman/dp/0596007124/ • https://github.com/tcorral/Refactoring_Patterns • https://www.youtube.com/watch?v=J18mLs-SRpI @leomicheloni