kako pisati varijable/podprograme i slično MOLIM PRIDRŽAVANJE OVOGA (PROČITAJTE OBAVEZNO)

4 views
Skip to first unread message

Alen Agić

unread,
Oct 3, 2010, 1:32:34 PM10/3/10
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
Reply all
Reply to author
Forward
0 new messages