Gruppe sort Morten, Peter, Jesper, Spencer & Støving
Item 40 Design method signatures carefully
Design method signatures carefully! (1/3) Metoder skal gøre én ting Undgå f.eks. getNamesOfPeopleAndDropRowsWithTheNamesInIT(…) Undgå mange parametre Undgå f.eks. getNamesWhere(name, grade, age, skillLevel, class, gender,…); Brug enums i stedet for booleans som input Thermometer.newInstance(TemperatureScale.CELSIUS) i stedet for Thermometer.newInstance(true)
Design method signatures carefully! (2/3) Alle metoder skal være brugbare i flere tilfælde Undgå f.eks. getPeopleBornIn1990(…); Brug f.eks.: getName, getLength, getSublist(indexA, indexB); Ved parametre, brug interfaces i stedet for klasser Undgå f.eks. setListOfPeople(arraylistOfNames,…); Brug: setListOfPeople(abstractlistOfNames); Går an på hvad du har brug for af egenskaber
Design method signatures carefully! (3/3) Hvad gør denne kode?
Item 60 Favor the use of standard exceptions
Favor the use of standard exceptions (1/3) Stort udvalg af eksisterende exceptions Mindre hukommelsesbrug & tid at loade klasserne Nemmere at genbruge kode Nemmere for andre at forstå
Favor the use of standard exceptions (2/3) IllegalArgumentExeption IllegalStateException NullPointerException IndexOutOfBondsException Eksempel:
Favor the use of standard exceptions (3/3) Lav gerne specifikke subklasser af eksisterende exceptions Brug de eksisterende unchecked exceptions hvor det er relevant
Item 30 Use enums instead of int constants
Enums, the wrong way (1/5) public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1;
Enums, the general way (2/5) Fungerer i princip som egentlige klasser. Eksporterer en enkel instans for hver enumeringskonstant. Som altid bedst med public accessor metoder
Interessante metoder (3/5) Generelt kald toString() values() valueOf(String)
Constant-specific method implementation (4/5) Nogle gange ønsker man ikke fælles implementation for enums Derfor kan der erklæres metoder for hver konstant
Private nested enums (5/5) ”Tvinger” enclosing class til at vælge en implementation
Item 10, 20 & 50
Item 10: Always override toString() Alle klasser arver toString() fra Object Returnerer som standard navnet på klassen og objektets hukommelsesadresse Fortæller intet om klassens indhold Print objektes værdier som klassen Person der printet navn & telefonnummer
Item 20: Prefer class hierarchies to tagged classes Shape Kender sin egen state, om det er en cirkel, trekant eller cirkel Giver meget ulæsbar kode og kan nemt give problemer ved udvidelse Hver klasse arver fra Shape
Item 50: Avoid strings where other types are more appropriate Strings er for det meste meget langsomme at arbejde med String id = ”#10203”, hvis man skal bruge nummeret flere gange, skal man parse id hver gang F.eks. int idNumber = id.parse(…); kun én gang
Shows over! You can go outside and play now!