Tipovi podataka u programiranju
Kao što znamo, podaci sa kojima rade računari su primarno numerički i to celobrojni. Osim njih, postoje i racionalni brojevi, tačnije brojevi u pokretnom zarezu. Naravno, u memoriji računara su svi podaci predstavljeni u obliku bitova i grupisani u bajtove.
Različiti programski jezici imaju razlčite tipove podataka. Strogo tipizirani jezici i jezici nižeg nivoa imaju tipove koji su bliži načinu rada računara. Sa druge strane, jezici višeg nivoa su "slobodniji" po pitanju tipova i čak ni ne prave razliku između celih brojeva i brojeva u pokretnom zarezu.
Numerički tipovi
Kao što smo rekli, ovo su osnovni tipovi podataka u programiranju (svi ostali tipovi se na jedan ili drugi način svode na brojeve). Osnovna podela je sledeća:
- celi brojevi
- brojevi u pokretnom zarezu
Celi brojevi
Celi brojevi su primarni u radu računara. Ipak, zavisno od programskog jezika, možemo imati različite celobrojene "podtipove".
U programskom jeziku Pascal postoji samo jedan celobrojni tip (integer). On obuhvata označene cele brojeve, a broj bajtova zavisi od platforme. Prema standardu, minimum su 2 bajta, odnosno vrednosti od -32768 do 32767.
U jeziku C takođe postoji celobrojni tip (int), ali za razliku od Pascal-a, ovaj tip može biti modifikovan, kako bismo ga prilagodili svojim potrebama.
Tip | Bajtovi | Opseg |
---|---|---|
char | 1 | -128..127 |
unsigned char | 1 | 0..255 |
int | 2 ili 4 | -32768..32767 ili -2147483648..2147483647 |
unsigned int | 2 ili 4 | 0..65535 ili 0..4294967295 |
short int | 2 | -32768..32767 |
unsigned short int | 2 | 0..65535 |
long int | 4 | -2147483648..2147483647 |
unsigned long int | 4 | 0..4294967295 |
Naravno, konkretan način na koji navodimo tipove zavisi od verzije jezika u kojoj radimo, pa je tako često moguće pisati samo npr. unsigned short umesto unsigned short int.
Jezik Java takođe ima celobrojne "primitivne" tipove, ali bez "komplikacija" sa prefiksima. Međutim, Java programeri moraju da se pomire sa time da su svi celobrojni tipovi označeni.
Tip | Bajtovi | Opseg |
---|---|---|
byte | 1 | -128..127 |
short | 2 | -32768..32767 |
int | 4 | -2147483648..2147483647 |
long | 8 | -9223372036854775808..9223372036854775807 |
Brojevi u pokretnom zarezu
Programski jezici generalno uvek nude i mogućnost rada sa racionalnim brojevima. Kod ovih brojeva takođe postoji ograničenje koliko veliki, odnosno mali broj možemo da zabeležimo, s tim što je ovde mnogo važnije ograničenje koje se odnosi na broj preciznih cifara koje imamo na raspolaganju. Pogledajte primere veoma velikog, odnosno veoma malog broja. Zaista, sa malim brojem preciznih cifara, ne možemo baš mnogo toga da uradimo.
123450000000...000
0.00...0000000012345
Standardni jezik Pascal prepoznaje samo jedan tip brojeva u pokretnom zarezu i to je tip real.
Jezik C ima tri racionalna tipa brojeva:
Tip | Bajtovi | Opseg |
---|---|---|
float | 4 | 6 preciznih cifara |
double | 8 | 15 preciznih cifara |
long double | 10 ili 12 | do 19 preciznih cifara |
Jezik Java ima tipove float i double koji odgovaraju istoimenim tipovima u jeziku C.
Neki programski jezici, kao što je JavaScript prepoznaju numerički tip, s tim što ne odvajaju eksplicitno cele od brojeva u pokretnom zarezu. I pored toga, imaju mogućnost zaokruživanja brojeva, kao i operatore koji rade samo sa celim brojevima.
Iako nam veliki broj različitih tipova izgleda komplikovano, treba da znamo da striktna tipizacija podataka jako utiče na brzinu izvršavanja samog programa.
Tekstualni tipovi
Ovo je drugi najvažniji tip podataka u programiranju. Praktično nema tog programa koji ne ispisuje neke tekstualne poruke ili nema potrebu rada sa tekstualnim vrednostima.
Jezik Pascal poseduje tip char koji može sadržati jedan znak. U jeziku C takođe postoji tip char, ali je još bliži "mašinskom" nivou - predstavlja jedan bajt i nad njim, sasvim normalno, možemo vršiti aritmetičke operacije. U stvari, znak će se tumačiti kao tekstulani podatak tek kada to eksplicitno zatražimo prilikom ispisa rezultata.
U jeziku Java ovaj tip podatka više liči na Pascal neko na C. Podatak može biti neki standardni Unicode karakter, pošto u Javi ovaj tip zauzima 2 bajta.
Svakako sa jednim jedinim znakom malo šta možemo da uradimo, pa je logično da u programiranju postoji i pravi "tekst". Tekstualni podatak se naziva string (prevedeno bi značilo "niska" ili "niz"), i u "starijim" programskim jezicima se definiše kao "niz znakova" - i to bukvalno. Na taj način ga posmatraju i Pascal i C. U svim modernijim verzijama Pascala se vrlo brzo zaista uvodi tip string, dok u C-u moramo da definišemo string kao niz znakova. U oba jezika moramo da navedemo maksimalnu dužinu stringa, da bi kompajler "znao" koliko memorije da odvoji za podatak. Pogledajte primer deklaracije string promenljive u Pascalu i C-u.
pasTekst : string[20];
char cTekst[20];
Ovakva praksa (posebno u jeziku C) je malo naporna za početnike, koji prvo moraju da savladaju rad sa nizovima da bi uopšte počeli da rade "zabavnije" programe.
Situacija sa Javom je mnogo komplikovanija. U ovom programskom jeziku stringovi ne spadaju u "proste" (tzv. "primitivne") tipove koji se mogu poistovetiti sa običnim nizovima znakova. Stringovi su čitavi objekti koji ne samo što sadrže niz znakova, već imaju i veliki broj drugih mogućnosti.
Jezik JavaScript ima sličnu filozofiju kao jezik Java, s tim što ne prepoznaje čak ni primitivan tip char. Svaki tekstualni podatak, pa makar se sastojao i iz jednog jedinog znaka je string.
Bilo bi poželjno da se početnici makar okvirno upoznaju sa konceptom objekata, kako bi na ispravan način radili sa stringovima.
Logički tip
Podatak logičkog tipa može imati samo jednu od dve moguće vrednosti: true (tačno) i false (netačno). Obično ove vrednosti dobijamo kao rezultate relacionih (upoređivanja) ili logičkih operacija (konjukcija, disjunkcija, negacija).
Jezici Pascal i Java imaju tip boolean koji prihvata striktno samo ove dve vrednosti. Kada se vrše provere prilikom grananja ili ciklusa, izrazi koji se zadaju moraju imati vrednost logičkog tipa ili će kompajler prijaviti grešku.
Sa druge strane, jezici C i JavaScript takođe prepoznaju logički tip (tzv. bool u C-u) ali ga poistovećuju sa numeričkom vrednošću. To znači da je nula u stvari false, a jedinica (tačnije sve što nije nula) true. JavaScript ide i korak dalje, pa se kao false računa i prazan string i "nulti objekat" null.
- I. Horton (2013): Beginning C, 5th ed., Apress, New York
- W. Savitch (2013): Absolute Java, 5th ed., Pearson Education, New Jersey