3. 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/
31. 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
49. Don't talk to strangers http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/
50. public class PaperBoy { private Wallet myWallet; ... public void chargeCustomer(Customer customer) { Collection<Bill> payment = customer.getPayment(5) myWallet.add(payment); } } Law of Demeter
51. 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? } } Law of Demeter
52. public class CareTaker { private Dog dog; ... public void walkTheDog(){ dog.walk(); dog.stop(); // tree or grass etc dog.doYourThing(); ... } } Dog's Legs
53. 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(); ... } } Dog's Legs
54. 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
55. Boy Scout Rule Leave the campground cleaner than you found it.
56. The only valid measurement of code quality WTFs / minute
57. Diskussion Kodkvalitet och retrospectives Smart vs Professional Skriva för mottagaren swenug vs JavaForum swejug?
Detta är det viktigaste du kommer höra idag. Varför står i slide 26.
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
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. >>>
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. >>>
Jan de Vries
IP har nästan ingen kod. IP skriver i ”detta fungerar för mig”.
>>> VI TAR ETT EXEMPEL TILL
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 >>> Vissa saker kan vi enas om ganska enkelt, som att nästa slide är sämre.
>>> Så, om det kan vara svårt att hitta gemensamma värden, vilka är då de värden som CC-boken förespråkar.
>> Readable, ok >> 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.
Kan tyckas vara en förutsättning för att kunna uppnå de andra två målen. >>> Men det är också så >>>
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. >>> LÅT OSS GÖRA ETT TEST
>>> DET FINNS ANDRA SKÄL
ENLIGT CC-boken
Är ”koding agains interface” YAGNI?
Metoder under 10 rader. Klasser/filer under 100?
Kod som kommunicerar väl – dvs blir lätt att förstå. >>>> IF ALL ELSE FAILS
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.