View Single Post
edit: ment til 7ate9
Du programmerer mot grensesnitt, altså at du bruker interface/abstrakte klasser som type på variablen, mens du instansierer den til en konkret klasse. Det er bra. Du bruker også regulære uttrykk for å sjekke om det er en gyldig dato, det er også bra. Stringbuilder er også bra.

Et par tips til forbedring: du hopper mye frem og tilbake mellom representasjonen av personnummeret som heltall og streng. Personnummeret er litt teit sånn sett, siden du både skal foreta en kontrollberegning og må ha ledende nuller i tallet. Uansett kan du gjøre parameterlisten i kontrollmetodene dine mye kortere. Du trenger faktisk bare et parameter, en streng eller et heltall. I begge tilfeller kan du bruke en løkke for å gå gjennom sifrene i personnummeret og gange med konstantene.

Her er noen egenskaper med titallssystemet som kan være grei å ha i bakhodet når du programmerer:
  • x * 10 + d, der d er et siffer, legger til sifferet på slutten av tallet.
  • x modulo 10 gir det siste sifferet i et tall. (når du så deler på 10 og gjentar får du det neste sifferet)
  • Floor(log10 tall) +1 gir antall siffer i et tall. Denne er litt kryptisk og ikke så lesbar, men grei å vite om.

Pass på å få riktig indentert kode, ellers er det nesten umulig å lese. Du har også en if-statement der det er for mange linjer i if-blokken. Når jeg kommer til else-blokken har jeg helt glemt hva "else" betyr. Det kan være lurt å håndtere spesialtilfeller først. Hadde du skrevet i begynnelsen:

Kode

if(!isValidDate(date)){
	System.out.println("Feil dato");
	return;
}
Kunne du skrevet resten av koden uten å bekymre deg for ugyldige datoer. Eventuelt kunne du kastet et exception.

I tillegg kan du jobbe med å trekke ut flere metoder. Da blir koden mer selvforklarende.

Dessuten bør man skille datamodeller fra (bruker)grensesnitt. Altså at du håndterer selve personnumrene i en klasse og skriver ut/tar imot data og sender til modellen i en annen.
Sist endret av lor3ntz; 6. september 2012 kl. 00:51.