200 likes | 338 Views
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
E N D
Gruppe sort Morten, Peter, Jesper, Spencer & Støving
Item 40 Design method signatures carefully
Design methodsignaturescarefully! (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 methodsignaturescarefully! (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 methodsignaturescarefully! (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 gernespecifikkesubklasserafeksisterende exceptions • Brug de eksisterende unchecked exceptions hvordeter 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
Interessantemetoder (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” enclosingclass til at vælge en implementation
Item 10: AlwaysoverridetoString() • 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: Preferclasshierarchies to taggedclasses Giver meget ulæsbar kode og kan nemt give problemer ved udvidelse Shape Shape Kender sin egen state, om det er en cirkel, trekant eller cirkel Hver klasse arver fra Shape
Item 50: Avoidstringswhereother 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. intidNumber = id.parse(…); kun én gang