Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


Duomenų tipai

Iš Pipedijos - durniausios enciklopedijos.
(Nukreipta iš Duomenų tipas)
Jump to navigation Jump to search

Duomenų tipai - taigi esminis dalykas, kurio mokosi visi programuotojai, o pakolei neišmoksta - tai būna vadinami lameriais, o kartais ir blogesniais žodžiais. Duomenų tipas - tai kaip ir toksai apibrėžimas, kuris reiškia, duomenų tipą - žodžiu, sąvoka pati iš savęs, todėl gana sunkiai paaiškinama paprastiems vartotojams.

Geriausiai duomenų tipus supranta tie, kas normaliai moka programuoti asembleriu. Gi tie, kas programuoja kokiu nors PHP, ar JavaScript - paprastai duomenų tipuose gaudosi gan prastai. Gal dėl to jiems programavimo kalbose prikuriama visokių type casting fyčerių, dėl kurių jie paskui dar mažiau susigaudo tame, kokie tenai tie tipai yra.

Procesorių architektūros nustatomi duomenų tipai

Akivaizdu, kad patį pagrindą duomenų tipams nustato ta procesorių architektūra, kuri yra naudojama, nes jei procesorius nenaudojamas - tai ir apie duomenis nėra ką šnekėt, o jei apie duomenis nėra ką šnekėt - tai ir išvis nėra apie ką šnekėt. Tai todėl pradžioje reikia bent jau išmokti skirti, kas tas yra bitas ir kas tas yra baitas.

Bendrai tai esminiai duomenų tipai yra tokie:

  • Bitas - tai minimalus informacijos kiekis
  • Baitas - tai 8 bitai
  • Žodis arba Word, kas reiškia vieno registro duomenų apimtis, kas yra mašininis žodis, nuo ko ir yra pavadinimas "Žodis"
  • Dvigubas Žodis arba Double Word arba DWord, kas reiškia dviejų registrų apimtis

Kebliausia čia yra su tuo Žodžiu arba Word, nes viename kompiuteryje jis gali būti tie patys 8 bitai, o kitame - gali būti ir 64 bitai - čia priklausomai nuo procesorių architektūros. Bendrai tai tiesiog tas kiekis duomenų, kuriuo procesorius operuoja normaliai veikdamas. Tuo tarpu Dvigubas Žodis - tai jau toksai konversinis vienetas, naudojamas tada, kai reikia suemuliuoti dvigubai ilgesnį žodį, nei gaunasi, pvz., ant 16 bitų mašinos skaičiuoti 32 bitų skaičius.

Tai vat štai šitie duomenų tipai pačiuose kompiuteriuose paskui naudojami dvejopai - tiesiog kaip duomenys ir kaip rodyklės arba pointeriai. Tai jei čia yra tiesiog duomenys - tai viskas gerai, o problema supratimui pasidaro, kai tenai būna pointeriai - nes pointeris yra ne duomenys, o tiktai tam tikra nuoroda, rodanti operacinės atminties adresą, kuriame guli duomenys.

Kadangi pointeriuose sunku susigaudyti, tai jų visi nekenčia. O kadangi visi jų nekenčia, tai kai kuriose programavimo kalbose pointeriai išvis yra pašalinti ir neegzistuoja. Bet kadangi be jų sunku apsieiti, tai tada atsiranda visokie pseudopointeriai, kaip kad referencai.


Programavimo kalbų nustatomi duomenų tipai

Dabar, jei bent minimaliai įsisavinote tuos aukščiau parašytus dalykus (o jūs greičiausiai neįsisavinote, nes dauguma yra per daug durni, kad suprastų apie tuos pointerius), tai galim visvien pereiti prie paprastų duomenų tipų.

Kažkada priešistorinėje senovėje, apie kokius 1960 metus, visi buvo pakvaišę apie duomenų tipus ir įsivaizdavo, kad kuo daugiau tų duomenų tipų prigalvosi, tuo bus geriau visokiems atvejams. Paskui paaiškėjo, kad visai ne, nes dauguma atvejų programuotojams visvien tenka susigalvoti savas gudrybes darbui su duomenimis, kurių neprigalvoja programavimo kalbų kūrėjai. O kartu, kaip paaiškėjo, dalis duomenų tipų yra praktiškai niekam niekada nenaudojami, todėl absurdiški ir nereikalingi, o to, ko reikia - būna, kad ir nebūna. Pvz., kai IBM kūrė tokią supermonstrišką kalbą kaip PL/I, tai prigalvojo tiek duomenų tipų, kad paskui ilgai negalėjo sukurti tai kalbai kompiliatoriaus, bet kartu nepagalvojo apie tokį elementarų tipą, kaip string.

Tai vėliau atsirado tokios programavimo kalbos, kaip C kalba, kur duomenų tipai buvo realiai nuprastinti ir pakeisti greičiau papildomais pavadinimais tiems pat baitams, žodžiams ir visokiems pointeriams. Ir tai jau pasiteisino.

Duomenų tipai yra dviejų rūšių - vieni yra paprastieji, tai reiškia, kad tie patys baitai, žodžiai ir panašiai, bet besiskiriantys naudojimu, pvz., aritmetinėmis operacijomis. Kiti yra sudėtiniai - tai reiškia, kad ten jau yra kai kurios gudrybės, kurių dėka tie duomenų tipai veikia ne taip jau paprastai.

Vieną iš išsamesnių duomenų tipų aprašymų turi SQL kalba, nes šioji ir buvo skirta duomenims saugoti bei apdirbtinėti. Kitą vertus, kitos kalbos irgi turi savų duomenų tipų, kurie kartais tiesiog skirtingose kalbose skirtingai vadinasi.

Paprastieji duomenų tipai

Čia yra kai kurie paprasčiausi duomenų tipai:

  • Bool - tiesiog bitas arba baitas - TRUE (tiesa arba (>0)) arba FALSE (melas arba (0))
  • Char - tiesiog raidės, realiai tai tiesiog tie patys baitai
  • Integer arba Int - koks nors skaičius, vieno žodžio ilgio, dažniausiai kokie nors 16 ar 32 bitai
  • Float - realusis skaičius, t.y., toksai, kur su slankiu kableliu

Šie duomenų tipų pavadinimai gali kiek skirtis skirtingose programavimo kalbose, tačiau vienaip ar kitaip jie yra visur arba beveik visur. Reta išimtis yra klasikinė Kernighan and Ritchie C kalbos implementacija, kur nėra Bool tipo, nes vietoje jo naudojami bet kokie kiti duomenys (jei nulis - tai FALSE, o jei ne nulis - tai TRUE). Vėlyvais laikais Bool tipą į C kalbą įvedė kažkoksai standartizacijos komitetas, kuriame sėdintys pusgalviai net nesuprto, kaip ta C kalba veikia. Kita su C kalba susijusi išimtis - ten gali nebūti Float tipo, nes jis gali būti tik priklausomai nuo to, kokiai architektūrai skirtas C kalbos kompiliatorius ir visokios programinės bibliotekos. Tačiau C kalba visgi yra gana savotiška, tai ja čia geriau nesiremkim, nes kitose kalbose paprastai viskas normaliau.

Priklausomai nuo programavimo kalbos, dauguma šių tipų gali turėti visokių variantų, pvz., signed integer, unisgned integer, short integer, long integer ar dar kokių tai. Bet tai jau ne tokie svarbūs dalykai, kurie su laiku ateina.

Jei šių pagrindinių tipų nežinote - tai reiškia, kad dar netgi nepradėjote mokytis programuoti, todėl jūsų visos šnekos apie programavimą yra tuščios. Bet jei jau suprantate, kuo tie tipai skiriasi - nu tai jau pirmas žingsnelis žengtas.


Sudėtingi duomenų tipai

Sudėtingi duomenų tipai yra apibrėžiami per tai, kad jie ne tokie jau paprasti, kaip tiesiog kažkokie tai bitai, baitai ar žodžiai.

  • Masyvas arba Array - tai tam tikro ilgio seka iš paprasto duomenų tipo duomenų, pvz., iš Char ar Integer, kur sekos elementai adresuojami pagal indeksą, t.y., pagal tokį numerėlį. Kol neišmoksite naudotis masyvu, tol visi patyrę programeriai jus vadins lameriu ir laikys jus protiškai neįgaliu. Kai išmoksite - tik tada jau po truputį su jumis ims kalbėtis kaip su žmogumi.
  • Stekas arba Stack - toksai pagerintas masyvas, į kurį galima dėti (PUSH) arba iš jo traukti (POP) duomenis pagal principą LIFO, o jo galo rodyklė arba indeksas pagal tai automatiškai apdeitinasi
  • Eilutė arba String - tai kaip ir tas pats masyvas, bet su tam tikrais pagerinimais, dėl kurių galima naudoti kintamo ilgio teksto eilutes ir tos eilutės pagal poreikį didėja ar mažėja. Dažniausios realizacijos - pagal null-terminator (gale esantis baitas su reikšme 0) arba su indeksu pirmame baite/žodyje (kaip Pascal).
  • Asociatyvinis masyvas - tai kaip ir tas pats masyvas, bet adresavimas yra ne pagal indekso numerėlį, o pagal kokį nors tekstą ar žodį, kuris parašytas. Kažkada išpopuliarinti Perl kalboje, tokie masyvai kartais labai patogūs vartoti, kai reikia turėti, pvz., skirtingų kalbų vertimus tiems pat tekstams.
  • Daugiamatis (dvimatis, trimatis, keturmatis, etc.) masyvas - tai kaip ir tas pats masyvas, bet jo elementai yra ne šiaip paprasti duomenys, o kiti masyvai, kurie, savo ruožtu, gali būti sudaryti iš kitų masyvų ir t.t.. Čia labai geras konceptas, kai reikia susigaudyti N-matėse erdvėse, kurių išmatavimų skaičius gali būti daug didesnis, nei mūsų Visatoje.
  • Struktūra arba Structure - tai kaip ir masyvas, bet su skirtingais, įvardinamais kintamaisiais. Leidžia laikyti visokius kompleksinius duomenis viename kintamąjame, t.y., gauti svarbiausią objektinio programavimo gerą fyčerį, nenaudojant jokio objektinio programavimo.
  • Enumerated arba Enum - tai tiesiog pavadinimų rinkinys, kur tie pavadinimai tiesiog iš savęs, kad būtų galima manipuliuoti tais pavadinimais, o ne kokiais tai skaičiais.
  • Diapazonas - retesnis duomenų tipas (nors yra Pascal kalboje), kuris reiškia skaičių diapazoną. Geras tuo, kad leidžia automatiškai patikrinti, ar kažkurie duomenys teisingi.
  • Tekstas arba Varchar - praktikoje SQL naudojamas duomenų tipas, kuris skirtas jau normalaus dydžio tekstams (pvz., 64 kilobaitams)
  • BLOB (Binary Large OBject) - praktikoje SQL naudojamas duomenų tipas, tai tiesiog kokie nors dvejetainiai duomenys, pvz., koks nors paveiksliukas
  • Date, Datetime, Time - paprastai koks nors didelis skaičius, kuris reprezentuoja kokias nors sekundes ar mikrosekundes, praėjusias nuo UNIX sistemos pradžios, t.y., nuo 1970 metų sausio 1 dienos 00 valandų, 00 minučių, 00 sekundžių.
  • Pinigai arba Money - tipas su tam tikra buhalterine gudrybe, kuris paslapčia po kablelio saugo daug daugiau visokių centų dalių, nei jūs tikitės, todėl neleidžia padaryti klaidų, už kurias jus nutarkuotų mokesčiai ar kokie nors sukti darbuotojai, kurie gali sugalvoti tas nuapvalintas centų dalis vogti.

Dar atskirai čia reikia paminėti UTF kodavimą, dėl kurio tie patys baitai ir visokie stringai pavirsta į komplikuotus, sudarytus iš dviejų ar keturių baitų, nes jau nebe tie laikai, kai ASCII naudojamas, todėl viskas dabar pasidarė sudėtingai. Tai daugelyje prorgamavimo kalbų tenka nurodyti - ar duomenys yra šiaip duomenys, ar kokie nors su papildoma raide, reiškiančia tą UTF, pvz., kaip nstring, wstring ar dar kaip nors.

Tai štai, jei kažkas jums pasiliko galvoje, tai dabar jau galit jaustis, kad truputį daugiau susigaudot apie programavimą, negu koks nors eilinis lameris. Bet visvien, supratimas ateina tik su laiku ir su pointeriais, tai kai tuos išmoksit suprasti ir naudoti, tai tada jau ir būsite išmokę.