Deklarace a inicializace proměnných

Dneska jsem byla požádána o vysvětlení, kdy nastane NullPointerException (a výjimky podobné). Když jsem se začala rozepisovat a vysvětlovat problém zeširoka, došlo mi, že ani u programování se nevyhneme přesné terminologii.

Proměnná je určena datovým typem (rozhoduje o potřebné velikosti a struktuře paměti) a její název je akorát srozumitelné označení. Ve skutečnosti proměnná dostane kód, kterému se říká formální proměnná. Ale protože jsme jen lidi a nepamatovali bychom si všechna ta čísla, používáme srozumitelné (nebo taková je alespoň myšlenka 🙂 ) názvy.

V moderních Garbage-collected jazycích (viz dále) jsou proměnné primitivního typu (int, char, double, …) a referenčního typu (objekty, pole, …).

Hodnotou proměnné primitivního typu je její obsah – tedy například číslo.

Hodnotou proměnné referenčního typu je reference – tedy odkaz na místo v paměti, kde je proměnná uložena.

  • Členské proměnné ve třídách = atributy, někdy také vlastnosti
  • Proměnné deklarované v metodách a blocích kódu = lokální proměnné
  • Proměnné v deklaracích metody = parametry

Toto rozdělení je spíše takový orientační přehled, protože existují ještě globální proměnné a specifické modifikátory pro každý jazyk upravující viditelnost členských proměnných.

Deklarace

V různých jazycích se proměnné deklarují různě, ale nejpoužívanější tzv. „Céčkový“ zápis vypadá takto:

typ_proměnné název_proměnné

například String prijmeni;

Deklarací tedy „slíbíme“, že kdysi v budoucnu budeme používat proměnnou, která bude datového typu String a bude se jmenovat prijmeni. Máme formální proměnou. Momentálně ale tato proměnná nic neobsahuje.

No nic, to není tak úplně pravda. Obsahuje defaultní hodnotu. Například při deklaraci logického datového typu (bool, boolean) bývá nastaveno false, u celočíselného typu (int, integer) bývá nastavena hodnota 0. Znáte-li svůj programovací jazyk dobře, lze tohoto využít a ušetřit tak nějaký čas počáteční inicializací primitivních datových typů.

U objektů, referenčního typu, je pak defaultní hodnota null – odtud NullPointerException – snažíme se přečíst objekt, kterému nebylo přiřazeno místo v paměti, kde je objekt uložen.

Inicializace

V zásadě je dobré, hned jak to jde, objekt inicializovat. Pokud neinicializujeme primitivní datový typ, pravděpodobně dostanete špatné výsledky, ale program nespadne a nenastane výjimka, jak by tomu bylo právě u čtení null pointer reference na objekt.

nazev_objektu = new typ_objektu() //objekt máme již deklarovaný
Klíčové slovíčko new může být v různých jazycích jiné, nebo úplně odstraněné. Do závorek píšeme hodnoty, které nastavíme konkrétnímu objektu pomocí jeho konstruktorů (ale o tom někdy příště).

Person p; //deklarace, obsahuje null

p = new Person('Jan', 'Novak'); //inicializace - obsahuje referenci na místo v paměti

Samozřejmě to lze zapsat na jeden řádek. Nyní když budeme chtít pracovat s proměnnou p, například získat jméno a příjmení například nějak takto:7

string name = p.jmeno;

string surname = p.prijmeni;

uložíme (pokud je vše dobře napsané uvnitř třídy Person)  do proměnné name Jan a do surname Novak.

Vyšší jazyky jako Csharp a Java mají Garbage Collector, který se stará o mazání objektů z paměti, na které už neexistují žádné reference. Pokud máme za to, že nějaký objekt už nebude potřeba a chceme dát garbage collectoru najevo, že ho může smazat, lze to zařídit tím nejjednodušším způsobem – nastavíme null referenci p = null; (za předpokladu že to byla jediná reference ukazující na tento objekt)

2 komentáře: „Deklarace a inicializace proměnných

  1. Jeg gik specifickt pÃ¥ nettet i dag for at se, om der var nogen nyheder fra dig, og se sÃ¥ nogle skønne billeder og dejlige tidender! Tillykke, tillykke, tillykke! Hvor er jeg dog glad pÃ¥ jeres vegne. Hun ser rigtig lækker og dejlig ud…. suk, glæder mig nu endnu mere til September, hvor Mini foÃeb¥rhntlig melder sin ankomst ;)Nyd hende, det har I fortjent.Kh Karen S

    To se mi líbí

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Google photo

Komentujete pomocí vašeho Google účtu. Odhlásit /  Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s