• No results found

Inför projektet: Några vanliga problem i granskningen. TDDD78, TDDE30, 729A

N/A
N/A
Protected

Academic year: 2022

Share "Inför projektet: Några vanliga problem i granskningen. TDDD78, TDDE30, 729A"

Copied!
33
0
0

Loading.... (view fulltext now)

Full text

(1)

TDDD78, TDDE30, 729A85 – jonas.kvarnstrom@liu.se – 2020

Inför projektet:

Några vanliga problem i granskningen

(2)
(3)

3

jonkv@idajonkv@ida

Kodlukt 3

Kodlukt / code smell:

Något man kan se "på ytan" på koden,

som indikerar att det kan finnas ett djupare problem

Lukten är inte problemet, utan ett tecken på problem

Fixas ofta genom refactoring: Kod skrivs om, men gör exakt samma sak

(4)
(5)

5

jonkv@idajonkv@ida

Redundans? 5

I vissa sammanhang kan redundans ha sina poänger…

This parrot is no more. It has ceased to be.

It's expired and gone to meet its maker.

This is a late parrot. It's a stiff. Bereft of life, it rests in peace.

If you hadn't nailed it to the perch, it would be pushing up the daisies.

It's rung down the curtain and joined the choir invisible.

This is an ex-parrot.

(6)

6

jonkv@idajonkv@ida

Undvik redundans 6

I programmering ska redundans och upprepning undvikas!

Gör det svårare att förstå koden

Mer att läsa

Måste se om upprepningen är exakt lika eller skiljer sig på något sätt

Mer kod att underhålla

Risk att inte all kod uppdateras på samma sätt

WET: Write Everything Twice WET: We Enjoy Typing…

DRY-principen: Don’t Repeat Yourself!

DIE: Duplication Is Evil

(7)

Onödigt många metoder

(8)

8

jonkv@idajonkv@ida

Onödigt många metoder 8

Kod ska skrivas effektivt – exempel:

(9)

Onödig upprepning

av kodmönster

(10)

Extrahera en hjälpmetod!

(11)

11

jonkv@idajonkv@ida

Upprepning av kodmönster (2) 11

Extrahera upprepade uttryck till namngivna variabler

IDEA kan hjälpa till: Refactor | Extract | Variable Lättare att se att delarna är medvetet identiska

Namnet ger en förklaring till deluttrycket Snabbare kod

(12)

12

jonkv@idajonkv@ida

Upprepning i konstruktorer 12

Många konstruktorer ➔ upprepad kod?

En konstruktor kan anropa en annan – en "kedja"

Specialsyntax:

this(args)

som första sats i en konstruktor vidarekopplar till en annan konstruktor

(13)

13

jonkv@idajonkv@ida

Att hitta upprepad kod 13

IDEA kan hitta vissa former av uppenbar repetition

Analyze | Locate Duplicates

Ni gör resten – alltför redundant kod

ger komplettering!

(14)

Kan även hitta duplicerad kod ”on the fly”

(15)

Python: Docstrings

Java: Javadoc

(16)

16

jonkv@idajonkv@ida

Javadoc-kommentarer 16

Kan dokumentera klasser, fält, metoder, konstruktorer, …

Kommentar omedelbart ovanför en deklaration

Startar med /**

Slutar med */

Typ av info kan markeras…

https://www.oracle.com/technetwork/java/javase/documentation/index- 137868.html

(17)

17

jonkv@idajonkv@ida

Javadoc (2) 17

Korrekt format är viktigt: Javadoc används av verktyg!

IntelliJ IDEA: Tryck Ctrl-Q för att se Quick Documentation

Javadoc (kommandorad): Skapa websidor för API-dokumentation

Kan inte säga ”as above”, går inte att ersätta med annan

kommentarstyp eller flytta!

(18)

18

jonkv@idajonkv@ida

Javadoc (3) 18

Krav på javadoc i projektet:

Alla klasser

Alla publika fält

Där det behövs – mindre uppenbara delar av projektet

(19)
(20)

20

jonkv@idajonkv@ida

Begrepp 1 20

Commodore 64 BASIC V2:

”Anropa en funktion”:

GOSUB 1000 Tänker vi så?

Knappast.

Vore bättre att kunna skriva print_at(20, 3, ”Good Morning!”)

Vi vill ha begreppet print_at()!

POKE 211, SP ➔ set_column(SP)…

(21)

21

jonkv@idajonkv@ida

Begrepp 2 21

Java:

Det går utmärkt att skriva…

Men det uttrycker inte vad vi tänkte!

Vad tänkte vi?

Om vi inte vet vad programmeraren tänkte, hur vet vi då om det är korrekt implementerat?

(22)

22

jonkv@idajonkv@ida

Begrepp 3 22

Java:

Det är lite bättre att skriva:

Ge namn till deluttryck!

Nu ser vi lite mer av vad programmeraren tänkte!

(23)

23

jonkv@idajonkv@ida

Begrepp 4 23

Java:

Det är ännu bättre att skriva:

Själva avståndsberäkningen är ett meningsfullt begrepp Som en metod kan detta återanvändas och anropas igen

Uttrycket reflekterar direkt en tanke:

Nya värdet är x plus avståndet mellan…

Som att utöka språket med meningsfulla begrepp!

(24)

24

jonkv@idajonkv@ida

Begrepp 5 24

Bättre att införa punkter som egna begrepp!

Vi vill ha avstånd mellan två punkter/saker, inte mellan 4 flyttal…

(25)

25

jonkv@idajonkv@ida

Begrepp 6 25

Det matematiska uttrycket har också beståndsdelar

Kan införa namn på olika delar

sqrt +

* -

x2 x1

-

x2 x1

* -

y2 y1

-

y2 y1

(26)
(27)

27

jonkv@idajonkv@ida

Listor 1 27

För att modellera en fast uppsättning objekt:

Kan vara frestande att använda flera variabler

Fungerar säkert…

Men det är omöjligt att prata om

”alla spelare”,

”alla nivåer”,

”nivåerna mellan 2 och 7”,

(28)

28

jonkv@idajonkv@ida

Listor 2 28

Eller kod som denna:

Onödigt mycket kod

Måste uppdatera koden när man skapar nya nivåer, inte bara nivålistan

Lätt att göra fel någonstans

(29)

29

jonkv@idajonkv@ida

Listor 3 29

Kan lätt leda till kod som denna:

Ser koden ut så här

går det alltid att göra bättre…

(30)

30

jonkv@idajonkv@ida

Listor 4 30

För att vår tanke ”spelarna”

ska kunna materialiseras i ett objekt ”spelarna”:

Kan prata om ”spelarna”, kan loopa över ”spelarna”

Om du tänker att något ska göras ”för alla”,

ska du väldigt sällan göra detta separat ”för A” och sedan ”för B”, även om det bara finns A och B (2 objekt).

Låt tanken ”för alla” synas i koden!

(31)

Att undvika hårdkodning och bli mer datadriven

(32)

32

jonkv@idajonkv@ida

Data: EnumMap 32

Tillkommer ny SquareType måste vi ändra koden, kompilera om

Vill vi ändra en färg …

Kan skicka med olika färgkartor, läsa en Map från fil, …

Data är flexiblare!

Gäller i princip alla if/switch-kedjor där man bara vill hitta ett värde:

Sådant ska man slå upp i en mappning if (name.equals(”Cow”)) icon = ”cow.jpg”;

(33)

33

jonkv@idajonkv@ida

Data: EnumMap 33

Tillkommer nya nivåer måste vi ändra denna kod…

Jobbig kod att läsa!

Kan lätt skapa nya nivåer, skicka runt dem som data, spara på fil!

Inte upprepad kod, många rader per nivå

Information ska inte representeras som procedurell kod!

References

Related documents

Under observationerna har vi tydligt kunnat se att dessa båda lärare utgår från gruppen i sin undervisning, det man kommer fram till gemensamt i språkandet

Man menar till exempel också att pojkar behöver flickor för att utveckla ett gott språkbruk och lära sig samarbeta och utgår därmed ifrån essentiella föreställningar

Det hon upplever är, snarare än upphetsning, ett kroppsligt lugn, en trygghet av att ha ”hittat hem till en trygg grotta.” (s. 147) Den alternativa temporaliteten tänks alltså

För att få inblick i var fel kommer till uttryck i skolan har jag utfört en etnografiskt inspirerad studie med deltagande observation och intervjuer. Det etnografen gör är

Om denna politik skall vara effektiv måste den emellertid dessutom garan- tera stabilitet i arbetstillfällena på lång sikt.. Genom att skogsarbete huvudsak- ligen

Genom detta fick mäklarna tillgång till detalje- rade uppgifter om vilka ägarna till olika företag var, en kunskap som tidigare bolagens styrelser haft tillgång till, men

Kontroller totalt Godkända Mindre allvarliga brister Allvarliga brister Utan allvarlig anm.. 262 31 127

Stora fält med majs och bönor kommer att skördas för hand, ungefär som när de förra ägarna odlade tobak.. Tobaksodlingen, som tidigare gav Zimbabwe