mini| Standardna hijerarhija tipova za Python 3 U računarstvu i programiranju, tip podataka (ili jednostavno tip) predstavlja skup ili grupu vrijednosti podataka, obično definisan skupom mogućih vrijednosti, skupom dozvoljenih operacija nad tim vrijednostima i/ili njihovom reprezentacijom kao mašinskih tipova. Specifikacija tipa podataka u programu ograničava moguće vrijednosti koje neka izražajna jedinica, poput varijable ili poziva funkcije, može imati. Kada je riječ o literalnim podacima, ona govori kompajleru ili interpreteru kako programer namjerava koristiti te podatke. Većina programskih jezika podržava osnovne tipove podataka kao što su cijeli brojevi (različitih veličina), brojevi s pokretnim zarezom (koji aproksimiraju realne brojeve), karakteri i Booleove vrijednosti.
Koncept Tip podataka može biti definisan iz više razloga: radi sličnosti, praktičnosti ili usmjeravanja pažnje. Često je to pitanje dobre organizacije koja olakšava razumijevanje složenih definicija. Gotovo svi programski jezici eksplicitno uključuju pojam tipa podataka, iako su dostupni tipovi često ograničeni razmatranjima jednostavnosti, izračunljivosti ili pravilnosti. Eksplicitna deklaracija tipa podataka obično omogućava kompajleru da odabere efikasnu mašinsku reprezentaciju, ali konceptualna organizacija koju nude tipovi podataka ne bi trebala biti zanemarena.
Različiti programski jezici mogu koristiti različite tipove podataka ili slične tipove s različitom semantikom. Na primjer, u programskom jeziku Python, tip int predstavlja cijeli broj s proizvoljnom preciznošću i podržava tradicionalne numeričke operacije poput sabiranja, oduzimanja i množenja. Međutim, u programskom jeziku Java, tip int predstavlja skup 32-bitnih cijelih brojeva u rasponu od −2.147.483.648 do 2.147.483.647, pri čemu se aritmetičke operacije pri prekoračenju opsega „obavijaju“ (wrap around). U jeziku Rust, ovaj 32-bitni cijeli broj označava se kao i32 i izaziva paniku pri prekoračenju opsega u režimu za debagovanje.
Većina programskih jezika također omogućava programerima da definišu dodatne tipove podataka, obično kombinovanjem više elemenata drugih tipova i definisanjem validnih operacija za novi tip podataka. Na primjer, programer može kreirati novi tip podataka nazvan "kompleksni broj", koji bi sadržavao realni i imaginarni dio, ili tip podataka za boju, predstavljen s tri bajta koji označavaju količine crvene, zelene i plave boje, zajedno s nizom znakova koji predstavlja naziv boje.
Tipovi podataka koriste se unutar sistemâ tipova, koji nude različite načine njihovog definisanja, implementacije i upotrebe. U sistemu tipova, tip podataka predstavlja ograničenje u tumačenju podataka, opisujući njihovu reprezentaciju, interpretaciju i strukturu vrijednosti ili objekata pohranjenih u memoriji računara. Sistem tipova koristi informacije o tipu podataka za provjeru ispravnosti računalnih programa koji pristupaju ili manipulišu podacima.
Kompajler može koristiti statički tip neke vrijednosti kako bi optimizovao potrebnu memoriju za njeno skladištenje i odabrao odgovarajuće algoritme za operacije nad tom vrijednošću. Na primjer, u mnogim C kompajlerima tip float je predstavljen s 32 bita, u skladu s IEEE specifikacijom za brojeve s pokretnim zarezom jednostruke preciznosti. Zbog toga će kompajleri koristiti specifične operacije mikroprocesora za rad s brojevima s pokretnim zarezom, poput sabiranja i množenja.
U sljedećoj tabeli je prikazano da većina tipova podataka u statistici ima uporediv tip podataka u računarskom programiranju, također i obrnuto: Statistika Programiranje realna vrijednost ( intervalna skala ) floating-point realna vrijednost ( skala omjera ) broj podataka (obično nenegativni) cijeli broj binarni podaci Boolean kategoričke podatke nabrojani tip slučajni vektor lista ili niz slučajna matrica dvodimenzionalni niz nasumično drvo drvo
Definicija identificirali su pet definicija "tipa" koje su korištene—ponekad implicitno—u literaturi.
Sintaksa Tip je isključivo sintakska oznaka pridružena varijabli prilikom deklaracije. Iako korisna za napredne sisteme tipova, poput substrukturalnih sistema tipova, ovakva definicija ne pruža intuitivno značenje tipova.
Reprezentacija Tip je definisan kao sastav jednostavnijih tipova—često mašinskih tipova.
Reprezentacija i ponašanje Tip je definisan svojom reprezentacijom i skupom operatora koji manipulišu tom reprezentacijom.
Prostor vrijednosti Tip je skup mogućih vrijednosti koje neka varijabla može imati. Ovakve definicije omogućavaju rad s (disjunktnim) unijama ili Kartezijevim proizvodima tipova.
Prostor vrijednosti i ponašanje Tip je skup vrijednosti koje varijabla može imati i skup funkcija koje se mogu primijeniti na te vrijednosti.
Definisanje tipova podataka u smislu njihove reprezentacije često se koristilo u imperativnim jezicima kao što su ALGOL i Pascal, dok se definisanje u smislu prostora vrijednosti i ponašanja koristilo u jezicima višeg nivoa, poput Simule i CLU. Tipovi koji uključuju ponašanje bliže su objektno orijentisanim modelima, dok bi se u modelu strukturiranog programiranja tipovi obično definisali bez pridruženog koda. Takve strukture nazivaju se obične stare podatkovne strukture (plain old data structures).
Klasifikacija Tipovi podataka mogu se klasificirati prema nekoliko faktora:
Primitivni tipovi podataka ili ugrađeni tipovi su tipovi koji su sastavni dio implementacije programskog jezika. Korisnički definirani tipovi podataka su neprimitivni tipovi. Na primjer, u Javi su numerički tipovi primitivni, dok su klase korisnički definirani tipovi. Vrijednost atomskog tipa je pojedinačna podatkovna stavka koja se ne može razložiti na manje komponente. Vrijednost složenog (kompozitnog) tipa ili agregatnog tipa predstavlja kolekciju podataka kojima se može pristupiti pojedinačno. Na primjer, cijeli broj se obično smatra atomskim, iako se sastoji od niza bitova, dok je niz cijelih brojeva svakako složeni tip. Osnovni tipovi podataka ili fundamentalni tipovi definirani su aksiomatski, na temelju osnovnih pojmova, ili nabrajanjem njihovih elemenata. Generirani tipovi podataka ili izvedeni tipovi su određeni i djelimično definirani na osnovu drugih tipova podataka. Svi osnovni tipovi su atomski.ISO/IEC 11404, 6.4 Na primjer, cijeli brojevi su osnovni tip definisan u matematici, dok je niz cijelih brojeva rezultat primjene generatora tipa niza na tip cijelih brojeva.
Terminologija varira—u literaturi se izrazi primitivni, ugrađeni, osnovni, atomski i fundamentalni često koriste naizmjenično.
Primjeri
Tipovi mašinskih podataka Svi podaci u računarima baziranim na digitalnoj elektronici predstavljeni su kao bitovi (alternativa 0 i 1) na najnižem nivou. Najmanja adresabilna jedinica podataka obično je grupa bitova koja se zove bajt (obično oktet, što je 8 bitova). Jedinica koju procesiraju instrukcije mašinskog koda zove se riječ (od 2011. godine, obično 32 ili 64 bita).
Tipovi podataka na mašinskom nivou omogućavaju detaljnu kontrolu nad hardverom, ali ovo također može otkriti detalje implementacije koji čine kod manje prenosivim. Stoga se tipovi na mašinskom nivou uglavnom koriste u sistemskom programiranju ili programskim jezicima niskog nivoa. U programskim jezicima višeg nivoa većina tipova podataka je apstrahirana tako da nemaju jezično definiranu mašinsku reprezentaciju. Na primjer, programski jezik C nudi tipove kao što su Boolean tipovi, cijeli brojevi, brojevi s pokretnim zarezom, itd., ali precizne bitne reprezentacije ovih tipova su definirane implementacijom. Jedini C tip s preciznom mašinskom reprezentacijom je char tip koji predstavlja bajt.
Boolean tip Boolean tip predstavlja vrijednosti tačno (true) i netačno (false). Iako su moguće samo dvije vrijednosti, češće se predstavljaju kao bajt ili riječ, a ne kao jedan bit, jer je potrebno više mašinskih instrukcija za pohranjivanje i dohvaćanje pojedinačnog bita. Mnogi programski jezici nemaju eksplicitni Boolean tip, umjesto toga koriste tip cijeli broj i tumače (na primjer) 0 kao netačno, a druge vrijednosti kao tačno. Boolean podaci se odnose na logičku strukturu kako se jezik tumači prema mašinskom jeziku. U ovom slučaju, Boolean 0 se odnosi na logičku netačnost (False). Tačno (True) je uvijek različito od nule, posebno jedan koji je poznat kao Boolean 1.
Numerički tipovi Gotovo svi programski jezici nude jedan ili više tipova podataka za cijele brojeve. Oni mogu ili ponuditi mali broj unaprijed definisanih podtipova koji su ograničeni određenim opsezima (kao što su short i long te njihovi odgovarajući unsigned varijante u C/C++), ili omogućiti korisnicima da slobodno definiraju podopsege, poput 1..12 (npr. u Pascalu/Adi). Ako odgovarajući nativni tip ne postoji na ciljnoj platformi, kompajler će ga razložiti u kod koristeći tipove koji postoje. Na primjer, ako se na 16-bitnoj platformi zatraži 32-bitni cijeli broj, kompajler će ga tiho tretirati kao niz od dva 16-bitna cijela broja.
Tipovi podataka s pokretnim zarezom predstavljaju određene frakcijske vrijednosti (racionalne brojeve, matematički). Iako imaju unaprijed definirane granice za maksimalne vrijednosti i preciznost, ponekad se pogrešno nazivaju realnim brojevima (što podsjeća na matematičke realne brojeve). Tipično su pohranjeni interno u formi (gdje su a i b cijeli brojevi), ali se prikazuju u poznatom decimalnom obliku.
Tipovi podataka s fiksnim zarezom su pogodni za predstavljanje novčanih vrijednosti. Često se interno implementiraju kao cijeli brojevi, što dovodi do unaprijed definiranih granica.
Za neovisnost o arhitektonskim detaljima, može biti ponuđen Bignum ili tip podataka s proizvoljnom preciznošću. Ovaj tip predstavlja cijeli broj ili racionalni broj s preciznošću koja je ograničena samo dostupnom memorijom i računalnim resursima sistema. Implementacije Bignum operacija nad vrijednostima odgovarajuće veličine mašinskog tipa znatno su sporije od odgovarajućih mašinskih operacija.
Enumerisani tip Enumerisani tip ima različite vrijednosti koje se mogu uspoređivati i dodeljivati, ali koje ne moraju nužno imati specifičnu konkretno reprezentaciju u računarskoj memoriji; kompajleri i interpretatori ih mogu predstavljati proizvoljno. Na primjer, četiri boje u špilu karata mogu biti četiri enumerisane vrijednosti nazvane CLUB, DIAMOND, HEART, SPADE, koje pripadaju enumerisanom tipu pod imenom suit. Ako je varijabla V deklarisana sa suit kao tipom podataka, može joj se dodijeliti bilo koja od tih četiri vrijednosti. Neke implementacije omogućavaju programerima da dodeljuju cijele brojeve enumeriranim vrijednostima, ili čak tretiraju te vrijednosti kao tipovima ekvivalentne cijelim brojevima.
String i tekstualni tipovi Nizovi karaktera su sekvence karaktera koje se koriste za pohranu riječi ili običnog teksta, najčešće u tekstualnim označivačkim jezicima koji predstavljaju formatirani tekst. Karakteri mogu biti slovo nekog alfabeta, cifra, razmak, interpunkcijski znak itd. Karakteri se uzimaju iz skupa karaktera poput ASCII ili Unicode. Tipovi karaktera i nizova karaktera mogu imati različite podtipove u zavisnosti od kodiranja karaktera. Originalni 7-bitni ASCII je bio ograničen, pa je zamijenjen 8, 16 i 32-bitnim skupovima, koji mogu kodirati širok spektar nelatinskih alfabetâ (kao što su hebrejski i kineski) i drugih simbola. Nizovi karaktera mogu biti promjenjive dužine ili fiksne dužine, a neki programski jezici podržavaju oba tipa. Takođe, mogu biti podtipizirani prema svojoj maksimalnoj veličini.
Pošto većina skupova karaktera uključuje cifre, moguće je imati numerički niz karaktera, poput "1234". Ovi numerički nizovi obično se smatraju različitim od numeričkih vrijednosti poput 1234, iako neki programski jezici automatski vrše konverziju između njih.
Tipovi unije