SlideShare ist ein Scribd-Unternehmen logo
1 von 48
 
Clean Code
This work by Fredrik Wendt is licensed under a  Creative Commons  Attribution-NonCommercial-ShareAlike  3.0 Unported License http://creativecommons.org/licenses/by-nc-sa/3.0/
 
 
Coding Dojo / User Group JDojo@Gbg
How is it even possible for code to be this bad?
Exhibits ,[object Object]
Hudson class is untestable Singleton
Konstruktorn anropar en metod som hämtar singleton-instansen och anropar en metod på den.
Hudson extends Node,  men Node använder instansmetoder på Hudson
”Smart” vs Professional ,[object Object]
Writes advanced code
String r; // lowercase url ,[object Object]
Maintainable code
'Clarity is king'
String lowerCaseUrl OfCurrentPage  // lowercase url http://www.slideshare.net/JandV/clean-code-summary
Clean Code Book Comparison http://blog.xebia.com/2009/01/clean-code-vs-implementation-patterns/
Vad är Clean Code?
int d; // elapsed time in days
int d; // elapsed time in days int elapsedTimeInDays;
int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation;
int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation; int fileAgeInDays;
public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; }
public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[]  cell  :  gameBoard ) if ( cell [ STATUS_VALUE ] ==  FLAGGED ) list1.add( cell ); return list1; }
public List<int[]>  getFlaggedCells () { List<int[]>  flaggedCells  = new ArrayList<int[]>(); for (int[] cell : gameBoard) if (cell[STATUS_VALUE] == FLAGGED) flaggedCells .add(cell); return  flaggedCells ; }
public List< Cell > getFlaggedCells() { List< Cell > flaggedCells = new ArrayList< Cell >(); for ( Cell  cell : gameBoard) if ( cell.isFlagged() ) flaggedCells.add( cell ); return flaggedCells; }
Clean code always looks like it was written by   someone who cares
Clean code always looks like it was wrtten by   somone who craes
Readable Maintainable Changeable
Agile Manifesto Individuals and interactions   over processes and tools Working software   over comprehensive documentation Customer collaboration   over contract negotiation Responding to change   over following a plan
 
Read able?
~90 % av din tid är läsning Vad händer om du  dubblar   skrivtiden ,  och därmed halverar lästiden ?
public class Part { private String m_dsc; // The textual description void setName(String name) { m_dsc = name; } } public class Part { private String description; void setDescription(String description) { this.description = description; } }
Varför bry dig? Vem skrivs koden för – användaren eller programmeraren? Den  primära användaren  av koden är en utvecklare, kanske ,[object Object]
Din kollega
Du själv someone who cares
Hur ska du skriva kod då?
DRY - Don't Repeat Yourself YAGNI - You Ain't Gonna Need It
small
Meaningful Names ,[object Object]
Pronounceable
Avoid Encoding ,[object Object]
Metoder ,[object Object]
Problemdomänens ord
Kommentarer
Kodformatering!

Weitere ähnliche Inhalte

Ähnlich wie Clean code

Revitalisering av legacy - är det möjligt - Joakim Lindbom
Revitalisering av legacy - är det möjligt - Joakim LindbomRevitalisering av legacy - är det möjligt - Joakim Lindbom
Revitalisering av legacy - är det möjligt - Joakim LindbomJoakim Lindbom
 
Using Microformats to aggregate data
Using Microformats to aggregate dataUsing Microformats to aggregate data
Using Microformats to aggregate dataGabriel Svennerberg
 
Kaskad och specificitet i CSS
Kaskad och specificitet i CSSKaskad och specificitet i CSS
Kaskad och specificitet i CSSkurs-resurs
 
Introduction to Qt Embedded
Introduction to Qt EmbeddedIntroduction to Qt Embedded
Introduction to Qt EmbeddedJohan Thelin
 
eXtreme Programming
eXtreme Programming eXtreme Programming
eXtreme Programming Peter Antman
 
Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?
Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?
Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?HiQInternational
 
Wpbar jkpg hur kan vi skriva bättre plugins
Wpbar jkpg   hur kan vi skriva bättre pluginsWpbar jkpg   hur kan vi skriva bättre plugins
Wpbar jkpg hur kan vi skriva bättre pluginsPlux Stahre
 
HT16 - DA156A - JavaScript forts.
HT16 - DA156A - JavaScript forts.HT16 - DA156A - JavaScript forts.
HT16 - DA156A - JavaScript forts.Anton Tibblin
 
Metodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testningMetodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testningJohan Holmberg
 
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:enKunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:enHiQInternational
 
HT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptHT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptAnton Tibblin
 
HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)Anton Tibblin
 
Xpages för utvecklare
Xpages för utvecklareXpages för utvecklare
Xpages för utvecklareThomas Adrian
 
Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.ADDQ
 

Ähnlich wie Clean code (20)

JavaScript + DOM
JavaScript + DOMJavaScript + DOM
JavaScript + DOM
 
Revitalisering av legacy - är det möjligt - Joakim Lindbom
Revitalisering av legacy - är det möjligt - Joakim LindbomRevitalisering av legacy - är det möjligt - Joakim Lindbom
Revitalisering av legacy - är det möjligt - Joakim Lindbom
 
Vim
VimVim
Vim
 
Using Microformats to aggregate data
Using Microformats to aggregate dataUsing Microformats to aggregate data
Using Microformats to aggregate data
 
Kaskad och specificitet i CSS
Kaskad och specificitet i CSSKaskad och specificitet i CSS
Kaskad och specificitet i CSS
 
Introduction to Qt Embedded
Introduction to Qt EmbeddedIntroduction to Qt Embedded
Introduction to Qt Embedded
 
eXtreme Programming
eXtreme Programming eXtreme Programming
eXtreme Programming
 
Test av mobila applikationer
Test av mobila applikationerTest av mobila applikationer
Test av mobila applikationer
 
Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?
Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?
Kunskapsbaren 2011 Linköping - Koda om eller koda nytt?
 
Wpbar jkpg hur kan vi skriva bättre plugins
Wpbar jkpg   hur kan vi skriva bättre pluginsWpbar jkpg   hur kan vi skriva bättre plugins
Wpbar jkpg hur kan vi skriva bättre plugins
 
HT16 - DA156A - JavaScript forts.
HT16 - DA156A - JavaScript forts.HT16 - DA156A - JavaScript forts.
HT16 - DA156A - JavaScript forts.
 
Versionshantering
VersionshanteringVersionshantering
Versionshantering
 
Metodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testningMetodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testning
 
Introduktion till JS
Introduktion till JSIntroduktion till JS
Introduktion till JS
 
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:enKunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
 
HT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScriptHT16 - DA156A - Introduktion till JavaScript
HT16 - DA156A - Introduktion till JavaScript
 
HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)HT16 - DA354A - Introduktion till programmering (Python)
HT16 - DA354A - Introduktion till programmering (Python)
 
Xpages för utvecklare
Xpages för utvecklareXpages för utvecklare
Xpages för utvecklare
 
Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.Testare i continuousvärlden - vad gör jag om dagarna.
Testare i continuousvärlden - vad gör jag om dagarna.
 
TypeScript DevSum 2013
TypeScript DevSum 2013TypeScript DevSum 2013
TypeScript DevSum 2013
 

Mehr von Fredrik Wendt

Continuous Delivery Experience Report - Agile Greece Summit 2016
Continuous Delivery Experience Report - Agile Greece Summit 2016Continuous Delivery Experience Report - Agile Greece Summit 2016
Continuous Delivery Experience Report - Agile Greece Summit 2016Fredrik Wendt
 
Informationsradiatorer NFI Systemunderhåll 2015-12-01
Informationsradiatorer NFI Systemunderhåll 2015-12-01Informationsradiatorer NFI Systemunderhåll 2015-12-01
Informationsradiatorer NFI Systemunderhåll 2015-12-01Fredrik Wendt
 
Go.cd - the tool that Jenkins ain't
Go.cd - the tool that Jenkins ain'tGo.cd - the tool that Jenkins ain't
Go.cd - the tool that Jenkins ain'tFredrik Wendt
 
Impact of CD, Clean Code, ... on Team Performance
Impact of CD, Clean Code, ... on Team PerformanceImpact of CD, Clean Code, ... on Team Performance
Impact of CD, Clean Code, ... on Team PerformanceFredrik Wendt
 
Arkitektur i agila projekt
Arkitektur i agila projektArkitektur i agila projekt
Arkitektur i agila projektFredrik Wendt
 
Coding dojos på arbetstid
Coding dojos på arbetstidCoding dojos på arbetstid
Coding dojos på arbetstidFredrik Wendt
 
Js Test Driver, JsHamcrest, JsMockito
Js Test Driver, JsHamcrest, JsMockitoJs Test Driver, JsHamcrest, JsMockito
Js Test Driver, JsHamcrest, JsMockitoFredrik Wendt
 
Jdojo@Gbg Introduction
Jdojo@Gbg IntroductionJdojo@Gbg Introduction
Jdojo@Gbg IntroductionFredrik Wendt
 
Presentation of JSConf.eu
Presentation of JSConf.euPresentation of JSConf.eu
Presentation of JSConf.euFredrik Wendt
 
Agile Injection, Varberg
Agile Injection, VarbergAgile Injection, Varberg
Agile Injection, VarbergFredrik Wendt
 
Webboptimering 25 min
Webboptimering 25 minWebboptimering 25 min
Webboptimering 25 minFredrik Wendt
 

Mehr von Fredrik Wendt (13)

Continuous Delivery Experience Report - Agile Greece Summit 2016
Continuous Delivery Experience Report - Agile Greece Summit 2016Continuous Delivery Experience Report - Agile Greece Summit 2016
Continuous Delivery Experience Report - Agile Greece Summit 2016
 
Informationsradiatorer NFI Systemunderhåll 2015-12-01
Informationsradiatorer NFI Systemunderhåll 2015-12-01Informationsradiatorer NFI Systemunderhåll 2015-12-01
Informationsradiatorer NFI Systemunderhåll 2015-12-01
 
Go.cd - the tool that Jenkins ain't
Go.cd - the tool that Jenkins ain'tGo.cd - the tool that Jenkins ain't
Go.cd - the tool that Jenkins ain't
 
Impact of CD, Clean Code, ... on Team Performance
Impact of CD, Clean Code, ... on Team PerformanceImpact of CD, Clean Code, ... on Team Performance
Impact of CD, Clean Code, ... on Team Performance
 
Arkitektur i agila projekt
Arkitektur i agila projektArkitektur i agila projekt
Arkitektur i agila projekt
 
Coding dojos på arbetstid
Coding dojos på arbetstidCoding dojos på arbetstid
Coding dojos på arbetstid
 
Js Test Driver, JsHamcrest, JsMockito
Js Test Driver, JsHamcrest, JsMockitoJs Test Driver, JsHamcrest, JsMockito
Js Test Driver, JsHamcrest, JsMockito
 
Jdojo@Gbg Introduction
Jdojo@Gbg IntroductionJdojo@Gbg Introduction
Jdojo@Gbg Introduction
 
Presentation of JSConf.eu
Presentation of JSConf.euPresentation of JSConf.eu
Presentation of JSConf.eu
 
Agile Injection, Varberg
Agile Injection, VarbergAgile Injection, Varberg
Agile Injection, Varberg
 
Webboptimering 25 min
Webboptimering 25 minWebboptimering 25 min
Webboptimering 25 min
 
Clean Code
Clean CodeClean Code
Clean Code
 
Using Mockito
Using MockitoUsing Mockito
Using Mockito
 

Clean code

Hinweis der Redaktion

  1. Detta är det viktigaste du kommer höra idag. Varför står i slide 26.
  2. HANDUPPRÄCKNING * Hur många är Utvecklare? eller vi tar inte utvecklare * Hur många får betalt för att huvudsakligen sitta och läsa på arbetstid? Känner till * CLEAN CODE * TDD * SERIESTRIPPEN
  3. HANDUPPRÄCKNING * CLEAN CODE * TDD * SERIESTRIPPEN
  4. Jag brukar prata om CC på Coding Dojo. Vi har kört detta öppet som en serie övningar som introducerar TDD och då har CC varit en del. Men det som inspirerade mig till att anmäla mig var två andra saker. &gt;&gt;&gt;
  5. Gojko Adzic som skrivit böcker (borde kännas igen av dotnetfolk) skrev ett blog inlägg med titeln How is it .... om ett av mina favoritverktyg. &gt;&gt;&gt;
  6. Jan de Vries
  7. IP har nästan ingen kod. IP skriver i ”detta fungerar för mig”.
  8. &gt;&gt;&gt; VI TAR ETT EXEMPEL TILL
  9. Clean Code-boken försöker definiera flera gånger och tar in citat från prominenta namn i branchen. Minsta gemensamma nämnaren. Cares är olika beroende på vem someone är. Tänk smart vs proff &gt;&gt;&gt; Vissa saker kan vi enas om ganska enkelt, som att nästa slide är sämre.
  10. &gt;&gt;&gt; Så, om det kan vara svårt att hitta gemensamma värden, vilka är då de värden som CC-boken förespråkar.
  11. &gt;&gt; Readable, ok &gt;&gt; De andra två kan man ju snabbt se att de härstammar från det agila tänket. Låt oss kolla på manifesten för Agile och SoftCrafShip.
  12. Kan tyckas vara en förutsättning för att kunna uppnå de andra två målen. &gt;&gt;&gt; Men det är också så &gt;&gt;&gt;
  13. 90 / 10 Dubbla skrivtiden för att halvera lästiden = stor vinst! 45 + 20 = 65 Clean code hänvisar till emacs-tiden och där såg man 10:1-förhållande mellan läs/skriv. &gt;&gt;&gt; LÅT OSS GÖRA ETT TEST
  14. &gt;&gt;&gt; DET FINNS ANDRA SKÄL
  15. ENLIGT CC-boken
  16. Är ”koding agains interface” YAGNI?
  17. Metoder under 10 rader. Klasser/filer under 100?
  18. Kod som kommunicerar väl – dvs blir lätt att förstå. &gt;&gt;&gt;&gt; IF ALL ELSE FAILS
  19. I slutändan handlar det också om att skriva för mottagaren. Är koden för avancerad? Använder vi ord från problemdomänen? Team-standarder – kodformatering, använd IDE.