• Apgrejdovali smo forum na XenForo 2.1.1, ukoliko imate predloga vezanih za izgled ili funkcionalnost foruma, ili ukoliko naletite na neki problem, javite nam OVDE

    DEFINISALI SMO PRAVILA FORUMA. Pročitajte ih, pojaviće se automatski kada krenete da čitate nešto!

XNA Programiranje Igara | Tutorijal #03 | Tipovi Podataka

Uni

PCAXE Addicted
Učlanjen(a)
31.08.2018.
Poruka
2.469
Rezultat reagovanja
984
Moja konfiguracija
PC / Laptop Name:
Lenovo ThinkPad X250 - i5 5300U/8GB/256GB EVO 860/6 Cell
Mice & keyboard:
Bloody V7M & Stock Thinkpad X250 Keyboard
OS & Browser:
Windows 10 + Microsoft Edge | ArcoLinux + i3 + Mozilla Firefox Quantum
Pre svega, ukoliko ste propustili neki u za sada kratkom nizu tutorijala, savetujem da prvo njih protumacite, posto se svi nadovezuju jedan na drugi. Da biste pronasli svaki od ovih, potrebno je da u polje foruma "Pretraga..." unesete "#xna-gwid" bez znakova navoda. :) Takođe napomenuo bih da je ovo dosta opširnija varijacija jučerašnjeg DLC-ja :d

Šta ćemo danas obraditi?
Ne možemo govoriti o programiranju, niti biti dobri programeri bez poznavanja tipova podataka kojima manipulišemo. Cilj današnje lekcije jeste da steknete znanje o veličinama, mogućnostima, veličini i brzini pri izvršavanju programa, kao i konverzije jednih tipova u druge. Ako ste spremni, 'ajde da počnemo!

Tipovi podataka? Koji mu to ... dođe?
Verovatno se pitate : "Zašto nam je potrebno ovo znanje?". Ako se sećate kada sam napomenuo da program ne razlikuje linije jedne od drugih, e pa slično je i ovde. Našem programu moramo signalizirati da li je podatak o kome je reč broj, slovo, rečenica ili možda neka apstraktna logička vrednost.
Tipovi podataka predstavljaju atribut koji programu govori na koji način želimo da koristimo prostor u memoriji. U C#-u razlikujemo više porodica tipova, a neke od najkorišćenijih jesu celi brojevi, brojevi sa pokretnom zapetom, logički tipovi i varijacije karaktera (slova).

Celi brojevi
Int (integer) jeste tip koji koristimo za skladištenje celobrojnih vrednosti koje su u rasponu od -2,147,483,648 do 2,147,483,647.

UInt jeste tip koji se slično kao i Int koristi za skladištenje celobrojnih vrednosti, ali u opsegu od 0 do 4,294,967,295. Prefiks U označava skup celih brojeva i nule.

Short jeste kraća verzija Int-a, te se koristi za vrednosti opsega -32,768 do 32,767.

UShort sličan je UInt-u ali je i njegov opseg skraćen i koristi se za vrednosti opsega 0 do 65,535.

Long jeste suprotan short-u i koristi se za skladištenje celobrojnih vrednosti opsega -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807.

ULong takodje moramo pomenuti, a slično prethpdnim, ima opseg vrednosti od 0 do 18,446,744,073,709,551,615.

Byte nije često korišćen ali vredan pomena, sadrži opseg vrednosti od 0 do 255 i koristi se za recimo alate poput RGB spektra.

SByte jeste varijanta Byte-a koji sadrži i negativne vrednosti i ima opseg od -128 do 127.

Tajna : Često se nazivi Long, Int i Shor zamenjuju nazivima Int64, Int32 i Int16 redom :)

Brojevi sa pokretnom zapetom
Naravno da nećemo uvek koristiti celobrojne tipove, jer njihove mogućnosti nekada nisu dovoljne. Zamislimo da pravimo naučni program koji meri dužine nogu crvenih mrava, ovde je potrebna velika preciznost i zato uvodimo brojeve sa pokretnom zapetom.

Float je najneprecizniji od svih, te može skladištiti precizno do 7 decimala. Sadrži opseg vrednosti od ±1.5 x 10 ^ - 45 do ±3.4 x 10 ^ 38. Da bismo ga uspešno koristili, potrebno je dodati sufiks F iza vrednosti broja.

Double jeste precizniji od float-a i može precizno čuvati do 15 cifara iza decimalne tačke. Ima opseg vrednosti od ±5.0 × 10 ^ - 324 do ±1.7 × 10 ^ 308. Da bismo uspešno izvršili deklaraciju, potrebno je dodati sufiks D iza vrednosti.

Decimal je najprecizniji od ovih. Može precizno čuvati do 29 cifara iza decimalne tačke. Opseg vrednosti koje su poržane kreću se od ±1.0 x 10 ^ - 28 do ±7.9228 x 10 ^ 28. Neizostavan pri dodeljivanju vrednosti jeste sufiks M posle brojevne vrednosti.

Varijacije karaktera
Ovi tipovi sadrže vrednosti izgrađene od jednog ili više karaktera. Primarna upotreba ovih jeste ispisivanje ili upisivanje teksa.

Char jeste najmanji tip ove vrste. Može sadržati najviše jedan karakter ili slovo. Pri navođenju vrednosti ovih, navodimo ih između dva apostrofa, kao što je 'a' ili 'A'. Pošto C# razlikuje mala od velikih slova, prethodna dva karaktera nemaju iste vrednosti.

String jeste tip koji koristimo za skladištenje reči, rečenica ili jednostavno neograničenog broja karaktera. Za razliku od tipa char, vrednost ovog tipa se navodi između dva znaka navoda, kao što je "Android VS iOS" ili "C# je Super!". C# ima problema pri raspoznavanju karaktera poput enter ili tab, pa za njih koristimo specijalne karaktere. Najčešće korišćeni su :
  • \n znači enter
  • \t znači tab
  • \\ znači \
  • \" znači "
  • \' znači '
Ovi se mogu zaobići u String tipu, ali ne i u Char tipu, koristeići @ znak, primer :
@"ovo je \" znači ovo je \
Logičke vrednosti
Jedina logička vrednost koja je u redovnoj upotrebi u C#-u i mnogim drugim jezicima jeste bool (boolean (čitaj bulijen)). Ovaj može sadržati isključivo dve vrednosti, tačnije "true" i "false".

Deklaracija, prisvajanje i inicijalizacija
Da bismo korisrili podatke, moramo izvršiti inicijalizaciju. Ova radnja dodeljuje tip i ime prostoru u memoriji, redom. Deklaracija može biti izvršena samo jednom. Primer :
Inicijalizacija, pri deklaraciji dodeljuje vrednost tipu odredjenog imena. Primer :
int broj = 5;
string rec = "klupa";
bool levo = true;
Prisvajanje jeste dodeljivanje vrednosti inicijalizovanom tipu. Dakle prethodno moramo izvršiti inicijalizaciju. Primer :
char maloSlovoA;
maloSlovoA = 'a';
Možemo više puta izvršiti ovu radnju i vrednost će biti jednaka onoj koja je poslenja dodeljena. Primer :
int broj;
broj = 5;
broj = 2;
U ovom primeru, vrednost broja je promenjena iz 5 u 2.

Kad i zašto više tipova?
Primetili ste da imamo više različitih tipova koje možemo upotrebiti za deklaraciju broja 972. Sigurno se nalazite u dilemi u kojoj sam se i ja nekad našao. Problematika nastaje u optimizaciji alata. Što manje vrednosti podržava tip, to je njegova upotreba efikasnija, a zauzetost memorije manja. U ovom slučaju možete pomisliti da je najbolje koristiti tip short, mada stvari nisu toliko jednostavne. Odabir tipa koji ćemo koristiti vršimo na osnovu potreba alata. Ako smo sigurni da nećemo koristiti negativne vrednosti, niti pozitivne vrednosti veće od recimo 1024, sasvim je logično koristiti tip ushort, a ne int ili long pošto će naš program funkcionisati sporije. Međutim ukoliko nismo sigurni da li će vrednosti izlaziti iz opsega pozitivnih vrednosti, koristimo tip short, tako da je na vama da odlučite koji ćete tip koristiti i totalno je zavisno od situacije.

Konverzije tipova
Moramo znati da C# ne može vršiti iste operacije nad različitim tipovima podataka. Na primer, ne možemo umetnuti broj tipa decimal u rečenicu tipa string, već moramo izvršiti konverzije.

Implicitne konverzije
Ukoliko su tipovi međusobno kompatibilni, C# će automatski izvršiti konverziju i te konverzije se nazivaju implicitne. Takođe implicitne konverzije koristimo kada konvertujemo vrednost manjeg u veci tip, npr. int u long ili byte u int.
Redosled koji program prati pri konverziji iz većih u manje tipove jeste :
byte --> short --> int --> long --> float --> double
Svaki od ovih tipova može se konvertovati u bilo koji od onih koji se nalaze desno od njega implicitno.
Primer implicitne konverzije :
Implicit.png
Ukoliko bismo pokušali da double konvertujemo u int, program bi rezultirao greškom, a primer pogrešnog programa je prikazan ispod :
ImplicitError.png

Eksplicitne konverzije
Ukoliko ste pokušali da izvršite prethodno prikazan kod, verovatno ste primetili da je doubleBroj podvučen crvenom linijom, što Visual Studio radi da bi ukazao na grešku. Da bismo ovo popravili i tip manjeg raspona konvertovali u tip većeg raspona, moramo koristiti eksplicitne konverzije.
Postoji dva načina vršenja ovakvih konverzija :
  1. navodjenje tipa podatka u koji konvertujemo, u zagradi ispred vrednosti koju koristimo
  2. korišćenje klase Convert i određene metode
Primer prvog načina prikazan je ispod :
Explicit.png
Dodavanjem atributa int, govorimo programu da želimo doubleBroj da koristimo kao celobrojnu vrednost. Ovakve konverzije često dovode do gubljenja podataka, a moguće ih je koristiti za svaki tip podataka osim konverzije brojeva u char, string ili bool.
Drugi način vršenja istog jeste prikazan u slici ispod :
Explicit2.png
Svaka metoda klase Convert počinje rečju To, a završava se nazivom tipa, pa je moguće koristiti sledeće :
ToBoolean
ToChar
ToByte
ToDecimal
ToDouble
ToInt16
ToInt32
ToInt64
ToString
ToUInt16
ToUInt32
ToUInt64
Šta dalje?
Ovaj tutorijal, još jedan je u nizu onih od presudnog značaja koji vas uče korišćenju glavnih tipova podataka i njihovim konverzijama. Verujem da i dalje ne možete učiniti mnogo, ali ovako ćete jednom kreirati rang liste, ubacivanjem koda ispisivanja teksta čija je sadržina : string korisničkoIme + int rezultat;

Sutrašnji tutorijal, objasniće nekoliko metoda klase Console, te ćete moći da kreirate i izmenjujete izgled Command Prompta, ali i da dobijate korisnički unos. Danas, nema domaćeg (mislim da ni prošli niste uradili, ali proveriću vas :d).

Srećno kucanje! :)
 
Vrh