Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.
IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

3. diel - Premenné, typový systém a parsovanie v C# .NET

Z minulej lekcie C# kurzu, Visual Studio a prvá konzolová aplikácia v C# .NET, už vieme pracovať s Visual Studiom a vytvoriť konzolovú aplikáciu.

Dnes sa v tutoriáli pozrieme na tzv. typový systém, ukážeme si základné dátové typy a prácu s premennými. Výsledkom budú 4 jednoduché programy vrátane kalkulačky.

Premenné

Než začneme riešiť dátové typy, poďme sa zhodnúť na tom, čo je to premenná (programátori mi teraz určite odpustia zbytočné vysvetľovanie). Z matematiky určite poznáte premennú (napr. x), do ktorej sme si mohli uložiť nejakú hodnotu, najčastejšie číslo. Premenná v informatike je úplne to isté, je to miesto v pamäti počítača, kam si môžeme uložiť nejaké dáta (meno užívateľa, aktuálny čas alebo databázu článkov). Toto miesto má podľa typu premennej tiež vyhradenú určitú veľkosť, ktorú premenná nesmie presiahnuť (napr. číslo nesmie byť väčšie ako 2 147 483 647).

Premenná má vždy nejaký dátový typ, môže to byť číslo, znak, text a podobne, záleží na tom, na čo ju chceme používať. Pred prácou s premennou ju väčšinou musíme najskôr tzv. deklarovať, teda musíme povedať jazyku, ako sa premenná bude volať a akého dátového typu bude (aký v nej bude obsah). Jazyk ju v pamäti založí a až potom s ňou môžeme pracovať. Podľa dátového typu premennej si ju jazyk dokáže z pamäte načítať, modifikovať, prípadne ju v pamäti založiť. O každom dátovom type jazyk vie, koľko v pamäti zaberá miesta a ako s týmto kusom pamäte pracovať.

Typový systém

Existujú dva základné typové systémy: statický a dynamický.

  • Dynamický typový systém nás plne odtieňuje od toho, že premenná má vôbec nejaký dátový typ. Ona ho samozrejme vnútorne má, ale jazyk to nedáva najavo. Dynamické typovanie ide mnohokrát tak ďaleko, že premenné nemusíme ani deklarovať. Akonáhle do nejakej premennej niečo uložíme a jazyk zistí, že nebola nikdy deklarovaná, sám ju založí. Do tej istej premennej môžeme ukladať text, potom objekt užívateľa a potom desatinné číslo. Jazyk sa s tým sám pobije a vnútorne automaticky mení dátový typ. V týchto jazykoch ide vývoj rýchlejšie vďaka menšiemu množstvu kódu, ich zástupcami sú napr. PHP alebo Ruby.
  • Statický typový systém naopak striktne vyžaduje definovať typ premennej a tento typ je ďalej nemenný. Akonáhle premennú raz deklarujeme, nie je možné jej dátový typ zmeniť. Akonáhle sa do textového reťazca pokúsime uložiť objekt používateľ, dostaneme vynadané.

C# je staticky typovaný jazyk, všetky premenné teda musíme najskôr deklarovať s ich dátovým typom. Nevýhodou je, že kvôli deklaráciám je zdrojový kód o niečo objemnejší a vývoj pomalší. Obrovskou výhodou však je, že nám kompiler pred spustením skontroluje, či všetky dátové typy sedia. Dynamické typovanie síce vyzerá ako výhodné, ale zdrojový kód nie je možné automaticky kontrolovať, a keď niekde očakávame objekt používateľ a príde nám tam namiesto toho desatinné číslo, odhalí sa chyba až za behu a interpret program zhodí. Naopak C# nám nedovolí program ani skompilovať a na chybu nás upozorní (to je ďalšia výhoda kompilácie).

Poďme si teraz niečo naprogramovať, nech si nadobudnuté znalosti trochu osvojíme, s teóriou budeme pokračovať až nabudúce. Povedzme si teraz tri základné dátové typy:

  • celé čísla: int,
  • desatinné čísla: float,
  • textový reťazec: string.

Program vypisujúci premennú

Skúsime si nadeklarovať celočíselnú premennú a, dosadiť do nej číslo 56 a jej obsah vypísať do konzoly. Založte si nový projekt, pomenujte ho Output (aj ku všetkým ďalším príkladom si vždy založte nový projekt):

int a;
a = 56;
Console.WriteLine(a);
Console.ReadKey();

Pripomeňme, že kód píšeme do tela metódy Main() v prípade projektov starších ako .NET 6.0.

Prvý príkaz nám nadeklaruje novú premennú a dátového typu int. Premenná teda bude slúžiť na ukladanie celých čísel. Druhý príkaz vykonáva priradenie do premennej, slúži na to operátor "rovná sa" (=). Posledný príkaz je nám známy, vypíše do konzoly obsah premennej a. Konzola je múdra a vie vypísať aj číselné premenné. ReadKey() je nám známy:

Konzolová aplikácia
56

Pre desatinnú premennú by kód vyzeral takto:

float a;
a = 56.6F;
Console.WriteLine(a);
Console.ReadKey();

Je to takmer rovnaké ako s celočíselnou premennou. Ako desatinný oddeľovač používame bodku (.) a na konci desatinného čísla je nutné zadať tzv. sufix F, tým hovoríme, že sa jedná o float.

Program Parrot

Minulý program bol trochu nudný, skúsme nejako reagovať na vstup od používateľa. Napíšeme program Parrot, ktorý bude dvakrát opakovať to, čo používateľ napísal. Ešte sme neskúšali z konzoly nič načítať, ale je to veľmi jednoduché. Slúži na to metóda ReadLine(), ktorá nám vráti textový reťazec z konzoly. Skúsme si napísať nasledujúci kód:

Console.WriteLine("Hi, I am a virtual parrot Lora, I love to repeat!");
Console.WriteLine("Type something in: ");

string input;
input = Console.ReadLine();

string output;
output = input + ", " + input + "!";

Console.WriteLine(output);
Console.ReadKey();

To už je trochu zábavnejšie :) Prvé dva riadky sú jasné, ďalej deklarujeme textový reťazec input. Do input sa priradí hodnota z metódy ReadLine() na konzole, teda to, čo používateľ zadal. Pre výstup si pre názornosť zakladáme ďalšiu premennú typu textový reťazec. Zaujímavé je to, ako pre výsledok premennej output využívame tzv. konkatenáciu (spájanie) reťazcov. Pomocou operátora + totiž môžeme spojiť niekoľko textových reťazcov do jedného a je jedno, či je reťazec v premennej, alebo je explicitne zadaný v úvodzovkách do zdroja. kódu. Do premennej teda priradíme input, ďalej čiarku, znovu input a potom výkričník. Premennú vypíšeme, vyčkáme na stlačenie klávesy a skončíme:

Konzolová aplikácia
Hi, I am a virtual parrot Lora, I love to repeat!
Type something in: 
Hello bird
Hello bird, Hello bird!

Do premennej môžeme priraďovať už v jej deklarácii, môžeme teda nahradiť:

string input;
input = Console.ReadLine();

za

string input = Console.ReadLine();

Program by šiel skrátiť ešte viac v mnohých ohľadoch. Všeobecne je ale lepšie používať viac premenných a dodržiavať prehľadnosť ako písať čo najkratší kód a po mesiaci zabudnúť, ako vôbec funguje.

Program Doubler

Doubler si vyžiada na vstupe číslo a to potom vynásobí hodnotou 2 a vypíše. S doterajšími znalosťami by sme asi napísali niečo také:

Console.WriteLine("Enter a number and I will double it: ");
int a = Console.ReadLine();
a = a * 2;
Console.WriteLine(a);
Console.ReadKey();

Všimnite si vynásobenie čísla a, ktoré sme vykonali pomocou priradenia. C# nám teraz vyhubuje a podčiarkne riadok, v ktorom sa snažíme hodnotu z konzoly dostať do premennej typu int. Narážame na typovú kontrolu, konkrétne nám ReadLine() vracia string a my sa ho snažíme uložiť do int. Čokoľvek príde z textovej konzoly, je vždy text, a to aj keď zadáme číslo. Budeme ho potrebovať tzv. naparzovať.

Parsovanie

Parsovaním sa myslí prevod z textovej podoby na nejaký špecifický typ, napr. číslo. Veľa dátových typov v C# má už pripravené metódy na parsovanie. Pokiaľ budeme chcieť naparsovať napr. int zo string, budeme postupovať takto:

string s = "56";
int a = int.Parse(s);

Vidíme, že dátový typ int má na sebe priamo metódu Parse(), ktorá ako parameter berie textový reťazec a vráti číslo. Využijeme túto znalosť v našom programe:

Console.WriteLine("Enter a number and I will double it: ");
string s = Console.ReadLine();
int a = int.Parse(s);
a = a * 2;
Console.WriteLine(a);
Console.ReadKey();

Najprv si text z konzoly uložíme do textového reťazca s. Do celočíselnej premennej a potom uložíme číselnú hodnotu reťazca s. Ďalej hodnotu v a vynásobíme hodnotou 2 a vypíšeme do konzoly:

Konzolová aplikácia
Enter a number and I will double it: 
1024
2048

Môžete sa stretnúť s parsovaním zo string pomocou triedy Convert, tá však slúži na konverziu medzi číslami a s textom si nemusí správne poradiť, je to teda zlé riešenie.

Parsovanie sa samozrejme nemusí podariť, keď bude v texte namiesto čísla napr. "slovo", ale tento prípad zatiaľ nebudeme ošetrovať.

Simple calculator

Ešte sme nepracovali s desatinnými číslami, skúsme si teda napísať sľubovanú kalkulačku. Bude veľmi jednoduchá, na vstup prídu dve čísla, program potom vypíše výsledky pre sčítanie, odčítanie, násobenie a delenie:

Console.WriteLine("Welcome to calculator!");
Console.WriteLine("Enter first number:");
float a = float.Parse(Console.ReadLine());
Console.WriteLine("Enter second number:");
float b = float.Parse(Console.ReadLine());
float sum = a + b;
float difference = a - b;
float product = a * b;
float quotient = a / b;
Console.WriteLine("Addition: " + sum);
Console.WriteLine("Subtraction: " + difference);
Console.WriteLine("Multiplication: " + product);
Console.WriteLine("Division: " + quotient);
Console.WriteLine("Thank you for using calculator. Press any key to end the program.");
Console.ReadKey();
Konzolová aplikácia
Welcome to calculator!
Enter first number:
3,14
Enter second number:
2,72
Addition: 5,86
Subtraction: 0,42
Multiplication: 8,5408
Division: 1,15441176470588
Thank you for using calculator. Press any key to end the program.

Všimnime si dve veci. Po prvé sme zjednodušili parsovanie z konzoly tak, aby sme nepotrebovali stringovú premennú, pretože by sme ju aj tak už potom nepoužili. Po druhé, na konci programu spájame reťazec s číslom pomocou operátora +. C# prekvapivo nezahlási chybu, ale vykoná tzv. implicitnú konverziu a zavolá na čísle metódu ToString(). Keby tomu tak nebolo alebo keby sme sa dostali do situácie, keď potrebujeme previesť čokoľvek na string, zavoláme na premenné metódu ToString(). C# to v tomto prípade urobil za nás, v podstate vykoná:

Console.WriteLine("Addition: " + sum.ToString());

Práve sme sa teda naučili opak parsovania – previesť čokoľvek do textovej podoby.

Operátor nameof

Niekedy sa nám môže hodiť získať namiesto hodnoty premennej jej názov. Slúži na to operátor nameof:

int number = 5;
Console.WriteLine(nameof(number));

Výstup:

Konzolová aplikácia
number

Môžeme si vyskúšať, že program naozaj nevypíše päťku, ale number.

Všetky programy máte samozrejme opäť v prílohe, skúšajte si vytvárať nejaké podobné, znalosti už k tomu máte :)

V nasledujúcom kvíze, Kvíz - C# .NET, konzola a premenné, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 9x (189.93 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Visual Studio a prvá konzolová aplikácia v C# .NET
Všetky články v sekcii
Základná konštrukcia jazyka C# .NET
Preskočiť článok
(neodporúčame)
Kvíz - C# .NET, konzola a premenné
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
22 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity