SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Clean Code en Javascript +
Live coding
Leonardo Micheloni
@leomicheloni
Agradecimientos
• Frontend Developers Madrid
• Luis y Vanessa
• eDreams
• Asistentes
@leomicheloni
Quién soy
• Leonardo Micheloni
• Programador +15 @leomicheloni
• Argentino
@leomicheloni
@leomicheloni
Agenda
• Conceptos
• KISS
• DRY
• YAGNI
• Code Smells
• SOLID
• Clean Code
• Refactor
• Live code!
@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
@leomicheloni
https://coe.aceinfosolutions.com/
"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
“La experiencia es eso que nos dice qué
tan bien merece la pena hacer las cosas
en función del contexto”
Yo
@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
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
@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
• Aumenta la carga cognitiva del código
• No deja clara la intención del código
• SOLID: S
• KISS
@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
• DRY
• Aumenta la carga cognitiva del código
@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
• SOLID: S
• KISS
• DRY
@leomicheloni
Funciones con efectos secundario
• El nombre no denota intención
• Hay miedo a cambiarlas
• Son peligrosas
• SOLID: S O
• KISS
• Aumentan la carga cognitiva del código
@leomicheloni
Funciones con mucha
responsabilidad
• Son difíciles de mantener
• Son difíciles de comprender
• Cambiar con mucha frecuencia
• SOLID: S
• KISS
• DRY
@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://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

Weitere ähnliche Inhalte

Ähnlich wie Clean code javascript + live coding

¿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
 
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
 
Functional programming Vol. 2
Functional programming Vol. 2Functional programming Vol. 2
Functional programming Vol. 2Gandhi Mena Salas
 
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
 
Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDTEdwin Cruz
 
Refactoring code smelss
Refactoring   code smelssRefactoring   code smelss
Refactoring code smelssGermán Küber
 
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
 
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
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID RefactorAgile Spain
 
Auditoria blog de cyzone
Auditoria blog de cyzoneAuditoria blog de cyzone
Auditoria blog de cyzoneerosparedes
 
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
 
Posicionament SEO, localització i visibilitat
Posicionament SEO, localització i visibilitat Posicionament SEO, localització i visibilitat
Posicionament SEO, localització i visibilitat Fundació Bit
 
Joomla! 1.6 en Español
Joomla! 1.6 en EspañolJoomla! 1.6 en Español
Joomla! 1.6 en Españolbrian teeman
 
Como crear una aplicación para facebook
Como crear una aplicación para facebookComo crear una aplicación para facebook
Como crear una aplicación para facebookjin93
 
¿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
 

Ähnlich wie Clean code javascript + live coding (20)

¿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?
 
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
 
Functional programming Vol. 2
Functional programming Vol. 2Functional programming Vol. 2
Functional programming Vol. 2
 
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
 
Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDT
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
 
Refactoring code smelss
Refactoring   code smelssRefactoring   code smelss
Refactoring code smelss
 
Software Craftsmanship
Software CraftsmanshipSoftware Craftsmanship
Software Craftsmanship
 
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
 
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
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID Refactor
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
Auditoria blog de cyzone
Auditoria blog de cyzoneAuditoria blog de cyzone
Auditoria blog de cyzone
 
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
 
Posicionament SEO, localització i visibilitat
Posicionament SEO, localització i visibilitat Posicionament SEO, localització i visibilitat
Posicionament SEO, localització i visibilitat
 
Day01
Day01Day01
Day01
 
Joomla! 1.6 en Español
Joomla! 1.6 en EspañolJoomla! 1.6 en Español
Joomla! 1.6 en Español
 
Como crear una aplicación para facebook
Como crear una aplicación para facebookComo crear una aplicación para facebook
Como crear una aplicación para facebook
 
¿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
 

Mehr von Leonardo Micheloni

Mehr von 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
 

Kürzlich hochgeladen

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 

Kürzlich hochgeladen (15)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 

Clean code javascript + live coding

  • 1. Clean Code en Javascript + Live coding Leonardo Micheloni @leomicheloni
  • 2. Agradecimientos • Frontend Developers Madrid • Luis y Vanessa • eDreams • Asistentes @leomicheloni
  • 3. Quién soy • Leonardo Micheloni • Programador +15 @leomicheloni • Argentino @leomicheloni
  • 5. Agenda • Conceptos • KISS • DRY • YAGNI • Code Smells • SOLID • Clean Code • Refactor • Live code! @leomicheloni
  • 6. ¿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
  • 8. "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." Martin Fowler @leomicheloni
  • 9. 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
  • 10. KISS • Keep it simple stupid • Hay un momento en nuestra evolución que nos gusta ser complicados • La simplicidad es belleza @leomicheloni
  • 11. YAGNI • You ain’t gonna need it • Voy a hacer tal cosa por las dudas • No se extremistas @leomicheloni
  • 12. “La experiencia es eso que nos dice qué tan bien merece la pena hacer las cosas en función del contexto” Yo @leomicheloni
  • 13. 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
  • 14. 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
  • 16. 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
  • 17. 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 • Aumenta la carga cognitiva del código • No deja clara la intención del código • SOLID: S • KISS @leomicheloni
  • 18. Clean Code: Naming • Soluciones • Verbalizar con un amigo • O con un pato de goma • Refactorizar hasta que el nombre sea “limpio” @leomicheloni
  • 19. 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
  • 20. Clean Code: condicionales • Smells • Ser “antinegativo” • Magic numbers • Asignaciones de booleanos en condiciones • Comentarios sobre una condición • Condiciones difícil de comprender • DRY • Aumenta la carga cognitiva del código @leomicheloni
  • 21. 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
  • 22. 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
  • 23. Arrow code • Identiación excesiva • Complejo de comprender • Complejo de modificar • SOLID: S • KISS • DRY @leomicheloni
  • 24. Funciones con efectos secundario • El nombre no denota intención • Hay miedo a cambiarlas • Son peligrosas • SOLID: S O • KISS • Aumentan la carga cognitiva del código @leomicheloni
  • 25. Funciones con mucha responsabilidad • Son difíciles de mantener • Son difíciles de comprender • Cambiar con mucha frecuencia • SOLID: S • KISS • DRY @leomicheloni
  • 26. 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
  • 27. Clean Code: funciones • Soluciones • Guard clauses • Fail fast • Extract method • Nuevas clases • Rename @leomicheloni
  • 28. Clean Code: comentarios • Pueden indicar que nuestro código no es claro • Evitar comentarios obvios • Evitar comentarios desactualizados @leomicheloni
  • 29. 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
  • 30. 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
  • 31. 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
  • 33. Mind set • Mirar el código • No odiar • Respect • Baby steps @leomicheloni
  • 34. 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
  • 35. Referencias • 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