Alen Agić
unread,Oct 3, 2010, 1:32:34 PM10/3/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to ppj projekt :P
copy pastam natuknice iz PPIJ-a:
Krivi naĉin inicijalizacije varijabli je jedan od najĉešćih izvora
grešaka u programu
Razlozi zbog kojih varijabla ne sadrţi vrijednost koju bi trebala:
Varijabli nikad nije dodijeljena vrijednost
Varijabla ima zastarjelu vrijednost
Dijelu varijable je dodijeljena vrijednost, a dijelu nije
Kako inicijalizirati varijable?
Inicijalizirati varijablu prilikom deklaracije
Inicijalizirati (i po mogućnosti deklarirati) varijablu blizu mjesta
na kojem se po prvi puta koristi
Koristiti konstante gdje god je to moguće
Posvetiti posebnu paţnju brojaĉima i akumulacijskim
varijablama
Posvetiti paţnju upozorenjima koje daje prevodilac (eng.
warning)
Koristiti konstante gdje god je to moguće
Vrijednost se dodjeljuje odmah prilikom inicijalizacije varijable
Sprjeĉavanje dodjele nove vrijednosti varijabli
Smjernice za smanjenje dosega varijable
Inicijalizirati varijable koje se koriste u petlji neposredno prije
petlje radije nego na poĉetku postupka
Inicijalizirati varijablu neposredno prije uporabe
Grupirati povezane naredbe (one koje koriste iste varijable)
Razlomiti grupe povezanih naredbi u posebne postupke
Pri programiranju krenuti sa što manjim dosegom te ga po
potrebi proširiti
Varijabla "temp" se u istome
programu upotrebljava u
dvije razliĉite svrhe
Za pohranu vrijednosti
diskriminante
Kao privremena vrijednost
kod zamjene dvije vrijednosti
Loša praksa!
Ĉini kôd manje ĉitljivim <----- hoće reć da ne koristite
varijable s imenima temp/ temp2 itd.. nego ih nazovite onim imenom što
one spremaju u sebe. npr diskriminanta (to je iz primjera koji računa
diskriminantu) nek se zove varijabla discriminant, a stari korijen
oldRoot, a ne temp1 i temp2.
Varijable sa skrivenim znaĉenjem
Razliĉite vrijednosti varijable znaĉe razliĉite stvari
Primjeri:
Varijabla pageCount predstavlja broj ispisanih stranica osim ako
ima vrijednost -1, kada signalizira pogrešku
Varijabla bytesWritten predstavlja broj bajtova upisanih u
datoteku, osim kada sadrţi negativan broj, kada predstavlja redni broj
diska na koji se obavlja upis
Loša praksa!
Varijabla se koristi za dva posla te je najĉešće krivog tipa za neki
od
poslova
NAJBITNIJI DIO SAD!!!:
Smjernice za imenovanje varijabli
Ime varijable mora u potpunosti i toĉno opisivati entitet kojeg
varijabla predstavlja
Dobra praksa: varijablu imenovati rijeĉima koje je opisuju:
Broj osoba u ameriĉkom olimpijskom timu:
numberOfPeopleOnTheUsOlympicTeam
Broj sjedala na stadionu: numberOfSeatsInTheStadium
Najveći broj bodova koje je osvojila ekipa neke zemlje na modernim
olimpijskim igrama:
maximumNumberOfPointsInModernOlympics
Dobro ime varijable opisuje problem (što), a ne njegovo
rješenje (kako)
Znanstveno dokazano da se trud koji će
se trebati uloţiti u debuggiranje
minimizira kada je duljina imena varijabli
izmeĊu 10 i 16 znakova [Gorla,
Benander, Benander, 1990]
Imenovanje indeksne varijable petlje
Kratka imena (npr. i, j, k) dozvoljena
Ukoliko se indeksna varijabla koristi izvan petlje ili u
ugnijeţĊenoj petlji treba joj dati smislenije ime
Privremena varijable obiĉno drţe meĊuvrijednosti izraĉuna ili
druge, na prvi pogled, nevaţne vrijednosti
Potrebno im je dati smislena imena, a ne imena poput temp!
Dati im imena koja impliciraju vrijednost koja je istina ili laţ
Loše: status ili sourceFile
Dobro: statusOK ili sourceFileAvailable
Nekada se koristi prefiks is – npr. isFound
Koristiti pozitivna imena
Loše: notFound
Dobro: found
Imenovati postupke tako da im imena odražavaju stvarnu namjenu
(postupak - > metoda, funkcija...)
Smjernice za pisanje if naredbi
Prvo napisati glavni (nominalni) slučaj, a tek zatim manje česte
slučajeve
Provjeriti jesu li operatori usporedbe (<, >, <=, >= itd.) dobro
upotrijebljeni
Napisati glavni (nominalni) slučaj uz if, radije nego uz else
– Kôd koji se izvršava nakon odluke (if) bi trebao biti smješten uz
samu odluku
(if)!
Problemi:
Pretjerano složeni logički
izrazi
Glavni (najčešći) slučajevi
nisu redoslijedom prvi
– Slaba preglednost
– Gubitak efikasnosti
Nisu pokriveni svi slučajevi
Primjer: Zamjena složenih testova postupcima
Složeni logički testovi su
preteški za čitanje i
praćenje
Mogu se zamijeniti
postupcima koji
obavljaju test i vraćaju
logičku vrijednost
Funkcionalna kohezija
Najjača i najpoželjnija
Javlja se kada postupak obavlja jedan i samo jedan zadatak
Primjeri
sin(), GetCustomerName(), EraseFile() itd.
Pretpostavka: postupci rade točno ono što imena sugeriraju
Ime mora opisivati namjenu postupka
Ime postupka mora opisivati ono što postupak radi
Primjer: Kako nazvati postupak koji radi sumarni izvještaj te
otvara datoteku za pohranu izvještaja?
ComputeReportTotals()
– Prekratko! Ne opisuje postupak na adekvatan način.
ComputeReportTotalsAndOpenOutputFile()
– Predugačko, ali adekvatno opisuje postupak
Ne razlikovati postupke samo po brojevima unutar imena
Imena moraju biti smislena te se postupke ne bi smjelo
razlikovati samo po brojevima:
OutputUser1()
OutputUser2()
OutputUser3()
Ime postupka treba biti dugačko onoliko koliko je potrebno da
bi se ispravno opisalo što postupak radi
U ime postupka uključiti glagol
Postupak bi trebao obavljati samo jedan točno odreĎeni
zadatak
Ime postupka mora signalizirati ono što postupak radi
Ime se obično sastoji od:
glagola – signalizira radnju
imena objekta – nad kojim se radnja obavlja
Generalna napomena: biti skeptičan i oprezan s postupcima
duljima od 200 programskih linija!
eto tolko o tome.. poštujte ova pravila :D
bilo bi lijepo jer će nam svima lakše bit razumjet kod, naravno malo
je poduži post, nadam se da ćete pročitati sve :D