p13 kako pisati citljiv kod-expanded

26
Osnove računarstva 2015/2016 Kako pisati Kako pisati čitljiv kod? čitljiv kod? Doc. dr Vedran Ljubović

Upload: admir-salagic

Post on 28-Jan-2016

234 views

Category:

Documents


0 download

DESCRIPTION

P13 Kako Pisati Citljiv Kod-expanded

TRANSCRIPT

Page 1: P13 Kako Pisati Citljiv Kod-expanded

Osnove računarstva 2015/2016

Kako pisatiKako pisatičitljiv kod?čitljiv kod?

Doc. dr Vedran Ljubović

Page 2: P13 Kako Pisati Citljiv Kod-expanded

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".

Page 3: P13 Kako Pisati Citljiv Kod-expanded

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.

Page 4: P13 Kako Pisati Citljiv Kod-expanded

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.

Page 5: P13 Kako Pisati Citljiv Kod-expanded

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;

}

Page 6: P13 Kako Pisati Citljiv Kod-expanded

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 {

}

}

Page 7: P13 Kako Pisati Citljiv Kod-expanded

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

Page 8: P13 Kako Pisati Citljiv Kod-expanded

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.

Page 9: P13 Kako Pisati Citljiv Kod-expanded

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

Page 10: P13 Kako Pisati Citljiv Kod-expanded

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 = ?

Page 11: P13 Kako Pisati Citljiv Kod-expanded

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

Page 12: P13 Kako Pisati Citljiv Kod-expanded

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;

Page 13: P13 Kako Pisati Citljiv Kod-expanded

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).

Page 14: P13 Kako Pisati Citljiv Kod-expanded

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)

Page 15: P13 Kako Pisati Citljiv Kod-expanded

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;}

Page 16: P13 Kako Pisati Citljiv Kod-expanded

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);

Page 17: P13 Kako Pisati Citljiv Kod-expanded

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);

Page 18: P13 Kako Pisati Citljiv Kod-expanded

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.

Page 19: P13 Kako Pisati Citljiv Kod-expanded

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 */

Page 20: P13 Kako Pisati Citljiv Kod-expanded

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.

Page 21: P13 Kako Pisati Citljiv Kod-expanded

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++; }

Page 22: P13 Kako Pisati Citljiv Kod-expanded

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++; }

Page 23: P13 Kako Pisati Citljiv Kod-expanded

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; } }

Page 24: P13 Kako Pisati Citljiv Kod-expanded

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 */

Page 25: P13 Kako Pisati Citljiv Kod-expanded

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.

Page 26: P13 Kako Pisati Citljiv Kod-expanded

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.