02. Premenné

Aby sa nám nemotali do konzoly výpisy z minulej lekcie, vypneme cez inšpektor komponent Vypisovanie na game objekte Main Camera:

Takéto vypnutie ponechá komponent na game objekte, aj skript v assetoch. Iba sa nebude vykonávať.

Vytvorte nový skript s názvom Premenne a priraďte ho na game objekt Main Camera.

V predošlej lekcii sme vypisovali do konzoly rôzne slová a čísla. Boli to konkrétne hodnoty: čisla ako 1 alebo 2, slová ako „Hello“ a podobne. Keby sme v programe používali vždy len konkrétne hodnoty, programovalo by sa dosť komplikovane. Predstavme si, že v našej aplikácii používame meno hráča, napríklad vypisujeme „Vitaj Kristína“ alebo „Koniec hry, Kristína“.

Alebo viete čo? Nepredstavujme si to a poďme to urobiť.

Otvorte v editore skript Premenne a doplňte do metódy Start príkaz na vypísanie „Vitaj Kristína“ a príkaz na vypísanie „Koniec hry, Kristína“.

Takto by mal vyzerať váš výpis v konzole:

Výborne, máme pripravenú aplikáciu pre Kristíny. Teraz urobíme to isté pre Lucie, pre Jakubov, pre Adamov…. A keď bude mať aplikácia takéto výpisy nie dva, ale bude ich mať stovky – napríklad nejaká urozprávaná RPG hra – máme o zábavu postarané.

Musí byť na to nejaký lepší spôsob.

Moja prvá premenná

V programovaní v skutočnosti používame konkrétne hodnoty len veľmi zriedka. Všetko čo sa dá, nahrádzame symbolmi ako a, i, x, meno a podobne. Tieto symboly reprezentujú nejaké konkrétne hodnoty a tieto hodnoty uložené v symbole sa môžu aj meniť. Preto im hovoríme premenné.

Doplňte teraz do metódy Start našu prvú premennú.

Kam ju doplníme? Na začiatok metódy, alebo na koniec? Program vykonáva príkazy v takom poradí, ako idú za sebou. Premenná musí byť najprv vytvorená a až potom sa dá používať. Preto ju vytvoríme hneď v prvom riadku metódy Start:

    void Start()
    {
        string meno = "Kristína";

        Debug.Log("Vitaj Kristína");
        Debug.Log("Koniec hry, Kristína");
    }

Práve sme v programe vytvorili novú premennú, ktorá sa volá meno. Táto premenná má hodnotu "Kristína". A čo znamená to string na začiatku riadku? K tomu sa dostaneme o chvíľu.

Keď už máme hodnotu „Kristína“ uloženú v premennej meno, nemusíme vypisovať konkrétne „Vitaj Kristína“ a „Koniec hry, Kristína“, ale môžeme použiť všeobecný zápis:

    void Start()
    {
        string meno = "Kristína";

        Debug.Log("Vitaj " + meno);
        Debug.Log("Koniec hry, " + meno);
    }

Uložte skript, spustite hru a sledujte, čo sa stalo v konzole:

Je tam to isté, čo predtým. Uznávam, nie je veľmi vzrušujúci výsledok. Ale čo sa v skutočnosti stalo, je, že máme program, v ktorom už teraz stačí zmeniť hodnotu premennej meno a program bude vypisovať iné meno. Bez toho, aby sme museli meno prepisovať na všetkých výskytoch v kóde.

Skúsme teda prepísať meno na inú hodnotu:

    void Start()
    {
        string meno = "Lucia";

        Debug.Log("Vitaj " + meno);
        Debug.Log("Koniec hry, " + meno);
    }

Po spustení hra vykoná výpisy s novou hodnotou:

Premenná nám teda pomohla napísať program všeobecnejšie. Takýto program sa bude ľahšie upravovať, rozširovať a hlavne: môže pracovať s premenlivými hodnotami.

Ak by sa počas hry hráč rozhodil zmeniť si meno, nie je to pre náš kód žiadny problém. Skúsme v programe zmeniť hodnotu premennej meno:

    void Start()
    {
        string meno = "Lucia";

        Debug.Log("Vitaj " + meno);

        meno = "Lucy1999";

        Debug.Log("Koniec hry, " + meno);
    }

Program vypíše:

Tu vidíme, že hodnota premennej sa môže meniť aj uprostred programu a program od tohto bodu ďalej už pracuje s novou hodnotu. Čo sa stalo so starou hodnotu? Tá je preč. Asi ako keď vylejte zo šálky starú studenú kávy a nalejete do nej novú.

A to sú premenné. Nádobky na skladovanie rôznych vecí. Akurát namiesto kuchyne sú uložené v pamäti počítača a namiesto kávy, múky, cukru sú v nich uložené hodnoty ako "Lucia", 27, "Kristína", 3.14159 a podobne.

Každá takáto nádobka má svoj názov – meno premennej. A pod týmto názvom ich v programe používame.

Teraz vytvoríme ďalšiu premennú:

    void Start()
    {
        string meno = "Lucia";
        int score = 100;

        Debug.Log("Vitaj " + meno);

        meno = "Lucy1999";

        Debug.Log("Koniec hry, " + meno);
    }

Práve sme v programe vytvorili novú premennú score a uložili do nej hodnotu 100. A čo je to int na začiatku riadku? K tomu sa tiež ešte dostaneme, takisto ako ku string pri premennej meno. Zatiaľ si poďme vypísať hodnotu skóre.

Doplňte za výpis o konci hry ďalší príkaz, ktorý vypíše „Nahraté body: “ aj s hodnotou premennej score.

Takto by mal vyzerať váš výpis v konzole:

BONUS: Vedeli by ste upraviť program tak, aby v konzole boli posledné dva výpisy v jednom riadku? Takto:

Typ premennej

No a teda dozvieme sa konečne, čo sú tie int a string, ktoré sú na začiatku riadku, keď vytvárame novú premennú? Dozvieme!

Keď vytvárame novú premennú, musíme počítaču povedať, akého bude typu. Typ premennej určuje, aké hodnoty sa do tej premennej môžu ukladať.

V kuchyni tiež nemôžeme do hocijakého typu nádoby dávať hocijaké veci. Do prúteného košíka na pečivo nemôžeme naliať kávu. A do soľničky sa nevojde banán. To isté platí v programe. Do premennej, ktorá je číselného typu, môžeme ukladať len čísla a do premennej, ktorá je textového typu zase len texty.

Najčastejšie používané typy v jazyku C# sú tieto:

  • int – pre celé čísla (integery), ako napríklad 0, 100, -20. Nie však pre desatinné čísla ako 3.14
  • string – pre texty, napríklad „Kristína“, „Hello World“ alebo aj „1+1“.
  • float – pre všetky čísla, vrátane desatinných. Napríklad 3.14f, 0.1f, 100.0f (písmenko „f“ za číslom je v tomto prípade taká povinná otrava, aby počítač vedel, že číslo má brať ako float. Neriešte, treba sa s tým zmieriť)
  • bool – pravdivostné hodnoty áno/nie. Toto je typ, ktorý pozná len dve možné hodnoty: true a false.

Keď si predstavíme prístrojovú dosku auta, tak int je ako počítadlo celkových najazdených kilometrov (hodnota 138 458), float je ako teplomer (hodnota 17.5), string je názov stanice rádia, ktoré práve hrá („Devin“) a bool je kontrolka diaľkových svetiel (svietia/nesvietia).

  • Vytvorte v programe novú premennú typu float, nazvite ju cas a uložte do nej hodnotu 17.3f.
  • Doplňte s pomocou tejto premennej do programu výpis času stráveného v hre.

Zhrnutie

Premenné nám slúžia na ukladanie hodnôt. Premenná je symbol, ktorý môžeme v programe používať namiesto hodnoty a keď sa hodnota v premennej zmení, program automaticky pracuje s novou hodnotu bez toho, aby sme museli prepisovať všetky miesta, kde je táto hodnota použitá.

Hotový projekt po tejto lekcii: Programovanie_02.zip

Pozrite si vo W3C kurze, aké všetky typy premenných obsahuje C#.

Pozrite si vo W3C kurze časť o premenných a vyskúšajte si examples.

Tento kurz od W3C nie je venovaný Unity, ale priamo jazyku C#, preto napríklad na výpis nepoužívajú príkaz Debug.Log ale Console.WriteLine. Ale to je len technický detail.

Urobte si Cvičenia 1 až 5 na prácu s premennými (Variables)

Pozrite si vo W3C kurze časť o operátoroch v C#.

Urobte si Cvičenia 1 až 4 na prácu s operátormi v C#.