P13 Kako Pisati Citljiv Kod-expanded
-
Upload
admir-salagic -
Category
Documents
-
view
234 -
download
0
description
Transcript of P13 Kako Pisati Citljiv Kod-expanded
Osnove računarstva 2015/2016
Kako pisatiKako pisatičitljiv kod?čitljiv kod?
Doc. dr Vedran Ljubović
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 2
Zašto je važno pisati čitljiv kod?
● Još 60-tih godina, na samim počecima računarskih nauka, došlo se do zaključka da je pisanje programa relativno lagano, problem je njihovo kasnije održavanje: popravka grešaka, analiza, kao i timski rad.
● Drugi programeri (ali i vi sami nakon nekog vremena!) moraju biti u stanju razumjeti vaš kod, šta ste htjeli postići, kako ste razmišljali.
● Čitljivost se postiže: dokumentovanjem programskog koda, jasnim imenovanjem, pridržavanjem standarda.
● U većini programerskih firmi definisan je dokument "coding standard".
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 3
Upotreba whitespace
● U programskom jeziku C, whitespace (nevidljivi) karakteri su uglavnom ignorisani.
● Uporedite sljedeći kod:for(i=0;i<n;i++){int x=niz[i];int pos=i;while(x<niz[pos-1]){niz[pos]=niz[pos-1];pos--;}niz[pos]=x;}
for(i=0;i<n;i++){int x=niz[i];int pos=i;while(x<niz[pos-1]){niz[pos]=niz[pos-1];pos--;}niz[pos]=x;}
vs.
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 4
Upotreba whitespace
● U programskom jeziku C, whitespace (nevidljivi) karakteri su uglavnom ignorisani.
● Uporedite sljedeći kod:for(i=0;i<n;i++){int x=niz[i];int pos=i;while(x<niz[pos-1]){niz[pos]=niz[pos-1];pos--;}niz[pos]=x;}
for (i=0;i<n;i++) {int x=niz[i];int pos=i;while (x<niz[pos-1]) {
niz[pos]=niz[pos-1];pos--;
}niz[pos]=x;
}
vs.
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 5
Indent stil
● Stil uvlačenja (indentacije) omogućuje da se brzo uoče logičke cjeline – blokovi koda.
for (i=0;i<n;i++) {int x=niz[i];int pos=i;while (x<niz[pos-1]) {
niz[pos]=niz[pos-1];pos--;
}niz[pos]=x;
}
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 6
Indent stil
● Stil uvlačenja (indentacije) omogućuje da se brzo uoče logičke cjeline – blokovi koda.
for { while {
}
}
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 7
Primjer
● Uočite grešku u sljedećem kodu
● Koja je vrijednost sljedećeg izraza?
for (i=0; i<MAX_ELEMENTS; i++) leftElement = left[i]; left[i] = right[i]; right[i] = leftElement;
x = 3+4 * 2+7
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 8
Indent stil
● Praz anprost orjeodsuš tinsko gzn ača ja
● Postoji više stilova uvlačenja (indentacije) koda:
– K&R (poznat i kao "one true brace style", OTB)
– Allman
– Whitesmits
– GNU stil
– ...● Nije važno koji stil koristite, dok god ga koristite
konzistentno u čitavom projektu.
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 9
K&R stil
● Stil koji koriste autori C-a Kernigan i Ritchie u svojoj čuvenoj knjizi
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 10
Korištenje zagrada
● Koja je vrijednost sljedećeg izraza:
12 + 4 % 3 * 8 / 2 = ?
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 11
Korištenje zagrada
● Koja je vrijednost sljedećeg izraza:
● Ako vam je trebalo više od 5 sekundi da odgovorite na ovo pitanje, znači da bi ovdje bilo korisno dodati zagrade.
12 + 4 % 3 * 8 / 2 = 16
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 12
Imena promjenljivih
● Imena promjenljivih trebaju da odražavaju namjenu
● Ime ne bi smjelo biti duže od 10ak znakova, ali ni kraće od 3 (izuzetak su i,j,k... čija je namjena jasna)
● Primjer loših imena promjenljivih:scanf("%d,%d,%d", &a,&b,&c);
if (a>24 || b>60 || c>60) return 0;
● Ovako je mnogo jasnije:scanf("%d,%d,%d", &sati, &minute, &sekunde);
if (sati>24 || minute>60 || sekunde>60) return 0;
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 13
Stilovi imenovanja (nomenklature)
● Kao i kod poravnanja, postoji više stilova za davanje imena promjenljivih: kako koristiti više riječi i sl.
– camelCaseStil – svaka riječ počinje velikim slovom, prva u pravilu malim (osim ako je riječ o tipu)
– donja_crta_stil – riječi se razdvajaju znakom underscore (donja crta _) i sve se piše malim slovom; ovo je uobičajen stil u C-u
– Mađarska notacija koristi prefikse za tipovime, npr. sve promjenljive tipa int počinju slovom i, nizovi počinju sa arr... npr. arru8NumberList (niz unsigned charova).
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 14
Komentari
● Komentari su omiljena i omražena tema među programerima
● Mnogi smatraju da komentare ne treba pisati, da je kod sa mnogo komentara loš (bolje je pisati kod tako da komentari nisu potrebni)
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 15
Komentari
● Šta radi sljedeći isječak koda?
// ispisi sume 1..n za svako n od 1 do numtrenutna = 1;prethodna = 0;suma = 1;for (i=0; i<num; i++) { printf("Suma = %d", suma); suma = trenutna + prethodna; prethodna = trenutna; trenutna = suma;}
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 16
Komentari
● Šta radi sljedeći isječak koda?
// postavi proizvod na bazuproizvod = baza;
// petlja od 2 do “num”for (i=2; i<=num; i++) { // pomnozi bazu za proizvodom proizvod = proizvod * baza;}
printf("proizvod = %d", proizvod);
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 17
Komentari
● Šta radi sljedeći isječak koda?
// izracunaj kvadratni korijen koristeci metodu// Newton-Raphsonr = num/2;while ( abs(r - (num/r)) > LIMIT) { r = 0.5 * (r + (num/r));}printf("r = %d", r);
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 18
Komentari
● Šta možemo zaključiti iz prethodnih slajdova?
– Zastarjeli i netačni komentari proizvode više štete nego koristi.
– Komentari koji samo ponavljaju kod ne doprinose razumijevanju koda. Ustvari samo otežavaju čitanje koda jer ga čine dužim.
– Komentari mogu biti nezamjenjivi za razumijevanje koda.
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 19
Komentari
● Komentar treba izražavati namjeru.
● Primjer dobrog komentara:
/* Preuzmi podatke o uposleniku iz baze */● Primjer lošeg komentara:
/* Azuriraj promjenljivu uposlenik */
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 20
Pravila za pisanje komentara
● Ako ste dugo razmišljali o relativno malom dijelu koda, napišite komentar
● Ako razdvajate kod u dijelove praznim redovima, vjerovatno na svakom takvom mjestu treba dodati komentar
● Komentari se pišu istovremeno kad i kod, ne naknadno!
● Ako ti je teško objasniti šta program radi, znači da ga ni sam ne razumiješ – razmisli još malo!
● Nekada je bolje prepraviti kod nego pisati komentar.
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 21
goto naredba
● goto considered harmful – preporuka je izbjegavati goto naredbu osim ako je ona baš najbolje rješenje. Primjer:
i=2; while (i<n) { j=2; while (j<i) { if (i%j==0) { goto LI; } else { if (j==i-1) { b=b+1; goto LI; } else goto LJ; } LJ: j++; } LI: i++; }
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 22
goto naredba
● Isti kod bez goto naredbe:
i=2; while (i<n) { j=2; while (j<i) { if (i%j==0) { break; } else if (j==i-1) { b=b+1; } j++; } i++; }
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 23
goto naredba
● Isti kod koristeći for petlju (koja je ovdje logičniji izbor) te koristeći K&R stil poravnanja:
● Zar ovako nije puno jasnije? Sada se vidi da je u pitanju program koji prebrojava proste brojeve manje od n.
for (i=2; i<n; i++) { for (j=2; j<i; j++) { if (i%j==0) break; if (j==i-1) b=b+1; } }
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 24
goto naredba
● Ipak postoje situacije kada je korištenje goto naredbe poželjno. Npr. u slučaju izlaska iz višestruke for petlje:
for (i=1; i<150; i+=3) { for (j=-55; j<55; j++) { for (k=180; k>150; k--) { if (i%j=2 && j==k) goto IZLAZ; } } }IZLAZ: .... /* nastavak programa */
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 25
Statičke i globalne promjenljive
● Statičke i globalne promjenljive treba izbjegavati kad god je moguće jer uvode pojavu sporednih efekata funkcije koji nisu očigledni iz prototipa funkcije.
19.11.2015 Vedran Ljubović * OR15 * P13: Kako pisati čitljiv kod? 26
Sažetak
● Pravila za OR i TP (počevši od zadaće 3):
– Koristite neki stil indentacije, nije bitno koji dok god se ne mijenja unutar jednog programa.
– Imenujte promjenljive smisleno (cca. 3-10 karaktera, osim i,j...)
– Koristite komentare u mjeri.
– Nemojte koristiti goto naredbu, statičke niti globalne promjenljive, osim ako imate jaaako dobar razlog koji ćete navesti u komentaru.