This work by. Fredrik Wendt. is licensed under a. Creative Commons

Relevanta dokument
Du fulländar mig! Om synergierna mellan agila metoder och UX. Joakim Holm Adaptiv AB. Erik Hammarström Antrop AB

Automation Region. Affärsdriven systemutveckling genom agila metoder. Stefan Paulsson Thomas Öberg

Bra kod luktar inte, den doftar. Data-Tjej, Linköping Daniel Deogun


Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Användningscentrering i agila utvecklingsprojekt. johanna.sarna@valtech.com Valtech

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Scaled Agile Framework

Ren Katt. Författare Deepa Balsavar Illustratör Kanchan Bannerjee. Översatt av Bokkok.se

Verktyg för agil systemutveckling. Vad är ett verktyg? Olika typer av verktyg för mjukvaruutveckling. Vad kan ett bra verktyg tillföra?

Översättning av galleriet. Hjälp till den som vill...

Den Röda Tråden. Vi kan ta fram arkitekturkrav. Vi kan ta fram arkitektur och design. Vi kan skriva Clean Code KRAV DESIGN IMPLEMENT VISION TEST

Webbregistrering pa kurs och termin

Design. Vad lärde jag mig förra lekfonen? Hur bidrog jag Fll lärandet? Kravhantering sammanfa0ning 13/04/14

xperia p manual svenska

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Kvalitetsarbete I Landstinget i Kalmar län. 24 oktober 2007 Eva Arvidsson

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

CHANGE WITH THE BRAIN IN MIND. Frukostseminarium 11 oktober 2018

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

SCRUM och agil utveckling

Health café. Self help groups. Learning café. Focus on support to people with chronic diseases and their families

OOA Objektorienterad Analys. Exempel på informell kravspecifikation. DD2385 Programutvecklingsteknik Några bilder till föreläsning 11 13/5 2013

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Tentamen LÖSNINGSFÖRSLAG

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

Tentamen Programmering fortsättningskurs DIT950

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

Teknikprogrammet Klass TE14A, Norrköping. Jacob Almrot. Självstyrda bilar. Datum:

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

TDDD78 Introduktion till OOP i Java

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Questionnaire for visa applicants Appendix A

Styrteknik: Binära tal, talsystem och koder D3:1

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Att skriva till och läsa från terminalfönstret

Beijer Electronics AB 2000, MA00336A,

Chapter 3: Using Classes and Objects

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TDDD78 Viktiga begrepp, del 2

CM FORUM. Introduktion till. Configuration Management (CM) / Konfigurationsledning. Tobias Ljungkvist

Grundläggande programmering med C# 7,5 högskolepoäng

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Laboration 1 - Grunderna för OOP i Java

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Systemet. Varför? Persiska viken 3 juli Resultat. Mitt under striden: USA befinner sig i konflikt med Irak och Iran. Mitt under striden, forts:

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Vad betyder TDD? Test Driven Design?

Agenda. Om olika perspektiv på vad socialt entreprenörskap är

Chapter 4: Writing Classes/ Att skriva egna klasser.

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Tidstrender för perfluorerade ämnen i plasma från svenska kvinnor

Informationshantering vid systemutveckling styrd av CM

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Workplan Food. Spring term 2016 Year 7. Name:

Webbreg öppen: 26/ /

Dubbelt seende, dubbla skördar?

Sammanfattning. Revisionsfråga Har kommunstyrelsen och tekniska nämnden en tillfredställande intern kontroll av att upphandlade ramavtal följs.

Metoder (funktioner) Murach s: kap Winstrand Development

PORTSECURITY IN SÖLVESBORG

Support Manual HoistLocatel Electronic Locks

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Policy för öppen källkod RIV Tekniska Anvisningar

Lösningar till tentamen i EDAF25

Objektsamlingar i Java

Inlupp1 - kommentarer. Uppgift 2. Uppgift 2

Application for exemption - Ansökan om dispens

Fokus på seniora konsulter med mycket erfarenhet

Custom-made software solutions for increased transport quality and creation of cargo specific lashing protocols.

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Dugga i Grundläggande programmering STS, åk

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag övning 2.

SHANGHAI PAVEMENTS C. Anders Wallén

Linköpings universitet 1

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Förändrade förväntningar

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Avveckla patentsystemet - Går det?

Malmö högskola 2007/2008 Teknik och samhälle

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

OOP Objekt-orienterad programmering

On the Establishment of UCSD i n in Organisations Åsa Cajander Uppsala Universitet Universitet

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Psykosocial enkät. 191 svar av 354 möjliga: 54% 2014: 172 av 333 = 52% 2011: 68%

Läkemedelsverkets Farmakovigilansdag

Transkript:

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 Hudson class is 3900+ LOC 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 Smart Professional Great coding skills Readable code Writes advanced code Maintainable code String r; // lowercase url '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

Readable?

~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 Din kund 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 Intention-Revealing JobQueue Pronounceable Problemdomänens ord Avoid Encoding Kommentarer Klasser Metoder Kodformatering!

Don't talk to strangers http://www.ccs.neu.edu/research/demeter/demeter-method/lawofdemeter/paper-boy/

Law of Demeter public class PaperBoy { private Wallet mywallet;... public void chargecustomer(customer customer) { Collection<Bill> payment = customer.getpayment(5) mywallet.add(payment); } }

Law of Demeter public class PaperBoy { private Wallet mywallet;... public void chargecustomer(customer customer) { Wallet wallet = customer.getwallet(); Collection<Bill> bills = wallet.getbills(); Collection<Bill> payment = extract(5, bills); mywallet.add(payment); // or bills? } }

Dog's Legs public class CareTaker { private Dog dog;... public void walkthedog(){ dog.walk(); dog.stop(); // tree or grass etc dog.doyourthing();... } }

Dog's Legs public class CareTaker { private Dog dog;... public void walkthedog(){ for (Leg leg : dog.getlegs()) leg.move(); for (Leg leg : dog.getlegs()) leg.stopmoving(); dog.brain.urinationcenter.releaseurge();... } }

Law of Demeter More formally, the Law of Demeter for functions requires that a method M of an object O may only invoke the methods of the following kinds of objects: 1. O itself 2. M's parameters 3. any objects created/instantiated within M 4. O's direct component objects 5. a variable, accessible by O, in the scope of M

Boy Scout Rule Leave the campground cleaner than you found it.

WTFs / minute The only valid measurement of code quality

Obs? Finns det någon korrelation mellan Clean code och framgång?

Diskussion Kodkvalitet och retrospectives Smart vs Professional Skriva för mottagaren swenug vs JavaForum swejug?

Legacy Code Kod utan test

Vad gör jag med kod som redan ligger i ryggsäcken? Få upp gubben på banan få koden testbar (och testad) Fixa ev buggar som testen plockar fram i ljuset Make it right

Vad gör jag med kod som redan ligger i ryggsäcken? Få upp gubben på banan få koden testbar (och testad) Fixa ev buggar som testen plockar fram i ljuset Make it right refactor!

Kod utan test... är legacy-kod refaktoreras inte ändras gärna inte av någon annan än den som skrev koden senaste dygnen är en ryggsäck

Outline Vad är Clean Code? Varför är det intressant? Problemet Lösningen Diskussion

Outline2 Problemet? Lösningen? Diskussion