4 Datvý typ, prměnné, literály, knstanty, výrazy, perátry, příkazy Studijní cíl Tent studijní blk má za cíl pkračvat v základních prvcích jazyka Java. Knkrétně bude uvedena definice datvéh typu, uvedeny datvé typy pužívané v prgramvacím jazyce Java, uvedeme si definici perátrů a perandů a příkazů. Pr všechny tyt základní prvky jazyka budu uvedeny příklady. Dba nutná k nastudvání 2 2,5 hdiny 4.1 Datvý typ Nejprve si uvedeme becnu definici pjmu datvý typ a pté se zaměříme na dstupné datvé typy v prgramvacím jazyce Java. Datvý typ je mnžina hdnt a mnžina perací nad těmit hdntami. Každá prměnná, knstanta a výraz jsu právě jednh datvéh typu. Typ prměnné a knstanty je určen během deklarace prměnné neb je typ výrazu dán pužitými perátry a perandy (např. definice th, jakéh datvéh typu bude výsledek p dělení datvéh typu int a duble) v každém prgramvacím jazyce musí být definván, jakéh typu je výsledek. V prgramvacím jazyce Java lze datvé typu rzdělit na dvě základní skupiny: Primitivní datvé typy jedná se nejzákladnější frmu dat v jazyce Java. Při deklaraci prměnné primitivníh datvéh typu dchází k alkaci určitéh pčtu bitů v paměti. Velikst alkvané paměti záleží na datvém typu k dispzici je základních 8 datvých typů, pd kterými si lze představit knkrétní hdnty: celčíselné jedná se datvé typy: byte (8 bitů), shrt (16 bitů), int (32 bitů), lng (64 bitů) reálné - duble (32 bitů), flat (64 bitů) znaky jedná se datvý typ char (16 bitů), pužita znakvá sada Unicde lgické hdnty jedná se datvý typ blean. Velikst není pevně dána, záleží na Java Virtual Machine (JVM) Referenční datvé typy referenční prměnné nebsahují žádné knkrétní hdnty, ale dkazují na bjekty v paměti. Jejich velikst není pevně dána. K detailnějšímu představení referenčníh datvéh typu se dstaneme při výkladu tříd a bjektů v další části kurzu. KST/IZAPR - Základy prgramvání blk 4, strana 1 (7) Michael Bažant
Obrázek 1: Primitivní datvé typy pr práci s čísly a jejich rzsah byte x = 10; char znak = A ; blean suhlas = true; duble cisl = 2563.5; Obrázek 2: Referenční datvý typ v jazyce Java 4.2 Přetypvání Pměrně častu perací při prgramvání je nutnst změny datvéh typu, tzv. přetypvání. V některých případech je přetypvání bezprblémvé, nebť se vykná autmaticky. V takvém případě se jedná implicitní přetypvání, které se typicky realizuje při rzšiřující knverzi, např. z datvéh typu byte na datvý typ int viz následující příklad. KST/IZAPR - Základy prgramvání blk 4, strana 2 (7) Michael Bažant
Příklad: int a = 100; lng b = a; Jiným případem je ptm přetypvání, které se autmaticky nerealizuje a pakliže jej chceme vyknat, tak jej musíme zabezpečit sami. Ve většině případů se jedná případy zúženi, tedy převdu většíh datvéh typu d menšíh. V takvém případě v jazyce Java zůstává příslušný pčet bitů vprav a zbytek zůstává nepužit viz následující příklad, kdy se pr explicitní přetypvání pužívají kulaté závrky, v nichž se nachází název nvéh datvéh typu Příklad: flat a = 100.001f; int b = (int) a; Příklad: duble e = (duble) (i / j); // vysledek 3.0 duble d = (duble) i / ( duble) j; // vysl 3.5 duble f = ((duble) i ) / j; // vysledek 3.5 4.3 Prměnné Při prgramvání ptřebujeme uchvávat data (např. údaje zadané uživatelem, různé dčasné a pmcné hdnty, výsledky výpčtů, údaje načtené ze subrů (textvých, datvých) apd.). Prměnné jsu pjmenvaná místa v paměti (paměťvá místa), ve kterých uchváváme infrmace. Prměnná je vždy určitéh typu, uchvávaná hdnta se může za běhu prgramu měnit. Prměnná vždy bsahuje jednu z mnžiny přípustných hdnt. Jazyk Java je silně typvý jazyk, cž znamená, že každá prměnná i výraz je určitéh datvéh typu splnění tét pdmínky kntrluje kmpilátr. P deklaraci prměnné již není mžné měnit její typ, ale hdntu je mžné měnit (až na výjimky, které budu uvedeny v další části kurzu). Deklarace (určení suvisejícíh typu dat) a inicializace (přiřazení úvdní hdnty d prměnné) prměnné v jazyce Java vypadá následvně: [mdifikatr] typ identifikatr [= hdnta]; Pr tent frmální zápis je pužita EBNF (viz blk 1), nepvinné údaje jsu tedy uvedeny v hranatých závrkách. V příkladu 1 je uvedena mžnst zápisu dekla- KST/IZAPR - Základy prgramvání blk 4, strana 3 (7) Michael Bažant
race se sučasnu inicializací prměnné, příkladu 2 ptm samtná deklarace prměnné bez inicializace. Mdifikátrů existuje (a reálně se pužívá) celá řada, příklad jednh je uveden v následující kapitle knstantách. Příklad 1: int pcet = 1; Příklad 2: int pcet; 4.4 Literály (dslvné hdnty) Literály představují pevně danu hdntu vyjádřenu explicitně bez pužití jiných prvků jazyka. Mezi literály tedy nepatří prměnné prgramu ani knstanty. Literály mhu být různých typů řetězcvé, číselné, lgické a jiné. V tét kapitle prjdeme jedntlivé mžnsti definice dslvných hdnt v prgramvacím jazyce Java. V jazyce Java jsu dstupné následující mžnsti zadávání dstlvných hdnt pr jedntlivé datvé typy: celčíselné typy (byte, shrt, int a lng) vyjádřit pmcí desítkvé, smičkvé neb šestnáctkvé číselné sustavy, cž je demnstrván na následujících příkladech. Desítkvá sustava int a = 42; Osmičkvá sustava (číslice 0 7), prefix 0, max. 21 číslic bez úvdní nuly int sedm = 07; // desitkve 7 int sm = 010; // desitkve 8 int devet = 011; // desitkve 9 Šestnáctkvá sustava (znaky 0 f), prefix 0x neb 0X, max. 16 znaků bez prefixu int x = 0X001; // x = 1 int y = 0x7fffff; // y = 8388607 int z = 0x7FFFFF; // y = 8388607 typy s plvucí desetinnu čárku (flat, duble) u těcht datvých typů je mžné pužít znak E neb e u vědecké ntace, znak f ne- KST/IZAPR - Základy prgramvání blk 4, strana 4 (7) Michael Bažant
b F pr 32bitvý literál s plvucí desetinnu čárku (je vyžadván) a znak d neb D pr 64 bitvý literál typu duble (tat vlba je výchzí a pdle knvence se neuvádí). flat f = 653.2f; flat g = 653.2F; duble d = 1105.36D; // vlitelne D neb d lgický typ (blean) u tht typu se pužívají výhradně hdnty true neb false, nelze pužívat jiné způsby zápisu (v některých jazycích např. hdnty 0, 1 apd.). blean t = true; blean s = 0; // chyba literály typu char a String mhu bsahvat libvlné znaky v kódvání Unicde (UTF-16). Umžňuje-li t editr zdrjvéh kódu, je mžné takvé znaky zadávat přím při psaní kódu. Pkud nikliv, lze pužít sekvenci Unicde escape jak např. \u0108. Typ char je ve skutečnsti 16-bitvé čísl, hdnty lze zadávat i ve tvaru číselných hdnt. Literály typu char vždy zapisujeme d jednduchých uvzvek a literály typu String d dvjitých uvzvek. Datvý typ String představuje třídu a jedntlivé řetězce ptm d tét třídy dvzené bjekty, k tét prblematice se ale dstaneme během dalšíh výkladu. char a = 'a'; char pismenn = '\u004e'; //vyuziti Unicde char a = 0x892; // hexa char b = 982; // literal typu int char c = (char)70000; // prekrceni rzsahu char String s = "Retezec"; dslvné hdnty pr ple k tét prblematice se vrátíme výkladu týkajícíh se plí K dispzici je také speciální literál null, který lze pužít jak hdntu libvlnéh referenčníh typu. Hdntu null je mžné přiřadit libvlné prměnné s výjimku prměnných primitivníh datvéh typu. S hdntu null nelze prvádět téměř žádné perace krmě testvání její přítmnsti. Tat hdnta se prt čast pužívá v prgramech jak značka, že určitý bjekt není k dispzici. KST/IZAPR - Základy prgramvání blk 4, strana 5 (7) Michael Bažant
4.5 Knstanty Mdifikátr final určuje, že se hdnta dané prměnné nemůže změnit. Následující deklarace prměnné definuje knstantu s názvem PI, jejíž hdnta představuje dhad čísla pí. final duble PI = 3.14159265; 4.6 Výraz Nejprve se pdíváme na becnu definici výrazu, pté na prvky, z nichž se mhu výrazy skládat. Pd pjmem výraz rzumíme knstrukci jazyka, která má hdntu nějakéh datvéh typu. Výrazy (anglicky expressins) jsu knstrukce vytvřené z prměnných, perátrů a vlání metd, které jsu sestaveny pdle syntaxe jazyka. Výsledkem vyhdncení výrazu je jediná hdnta. Příklady výrazů (jsu zvýrazněny tučně): int frekvence = 0; // vyraz ma hdntu dat. typu int ple[0] = 100; int vysledek = 1 + 2; if (hdnta1 == hdnta2) {} 4.7 Operátry V předchzí kapitle výrazech jsu u všech příkladů pužity krmě prměnných také speciální symbly, na které se nyní zaměříme. Těmt symblům říkáme perátry a nyní si uvedeme becnu definici. Operátry jsu speciální symbly, které prvádějí knkrétní perace s jedním, dvěma neb třemi perandy a ptm vrací výsledek. Operandy jsu části výrazu, na které je aplikván jeden z relevantních perátrů, přičemž každý perand má hdntu knkrétníh datvéh typu. Pr demnstraci pjmenvání jedntlivých částí uvedených příkladů pužijeme názrný brázek (viz Obrázek 3). KST/IZAPR - Základy prgramvání blk 4, strana 6 (7) Michael Bažant
Obrázek 3: Prvky výrazu V jazyce Java (stejně jak i v jiných jazycích) je k dispzici celá řada perátrů, se kterými se seznámíme v dalším blku tht kurzu. 4.8 Příkaz Příkaz (anglicky statement) tvří úplnu jedntku prvádění prgramu. Následující typy výrazů lze změnit na příkaz, když příslušné výrazy uknčíme středníkem (tyt příkazy nazýváme výrazvými příkazy): výrazy přiřazení libvlné pžití perátrů ++ neb -- vlání metd výrazy vytvření bjektů Krmě výrazvých příkazů také existují dva další typy příkazů: deklarační příkazy (těmi se deklaruje prměnná) a příkazy řízení tku, které regulují přadí, ve kterém se prvádějí jiné příkazy. S těmit příkazy se seznámíme v dalším blku 6 tht kurzu. Otázky na prcvičení 1. Jaké primitivní datvé typy jsu k dispzici v jazyce Java? 2. C bsahuje referenční prměnná? 3. Jaký je rzdíl mezi výrazem a příkazem? 4. K čemu služí knstanty? 5. Jak definvujeme datvý typ? Odkazy a další studijní prameny 1. Java Tutrial - http://dcs.racle.cm/javase/tutrial/ KST/IZAPR - Základy prgramvání blk 4, strana 7 (7) Michael Bažant