Získej svůj iPhone v nové soutěži! Získej svůj iPhone v nové soutěži!
Nová překladatelská soutěž ITnetwork.cz o telefon iPhone, sluchátka Beats a další věcné ceny za 4 hodiny práce.
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

3. díl - Proměnné a typový systém

Ostatní jazyky Visual Basic .NET Základní konstrukce Proměnné a typový systém

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Z minulé lekce, Visual Studio a první konzolová aplikace, již umíme pracovat s Visual Studiem a vytvořit konzolovou aplikaci. V dnešním Visual Basic .NET tutoriálu se podíváme na tzv. typový systém, ukážeme si základní datové typy a práci s proměnnými. Výsledkem budou 3 jednoduché programy včetně kalkulačky.

Proměnné

Než začneme řešit datové typy, pojďme se shodnout na tom, co je to proměnná (programátoři mi teď jistě odpustí zbytečné vysvětlování). Určitě znáte z matematiky proměnnou (např. x), do které jsme si mohli uložit nějakou hodnotu, nejčastěji číslo. Proměnná je v informatice naprosto to samé, je to místo v paměti počítače, kam si můžeme uložit nějaká data (jméno uživatele, aktuální čas nebo databázi článků). Toto místo má podle typu proměnné také vyhrazenou určitou velikost, kterou proměnná nesmí přesáhnout (např. číslo nesmí být větší než 2 147 483 647).

Proměnná má vždy nějaký datový typ, může to být číslo, znak, text a podobně, záleží na tom, k čemu ji chceme používat. Většinou musíme před prací s proměnnou tuto proměnnou nejdříve tzv. deklarovat, čili říci jazyku jak se bude jmenovat a jakého datového typu bude (jaký v ní bude obsah). Jazyk ji v paměti založí a teprve potom s ní můžeme pracovat. Podle datového typu proměnné si ji jazyk dokáže z paměti načíst, modifikovat, případně ji v paměti založit. O každém datovém typu jazyk ví, kolik v paměti zabírá místa a jak s tímto kusem paměti pracovat.

Typový systém

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

Dynamický typový systém nás plně odstiňuje od toho, že proměnná má vůbec nějaký datový typ. Ona ho samozřejmě vnitřně má, ale jazyk to nedává najevo. Dynamické typování jde mnohdy tak daleko, že proměnné nemusíme ani deklarovat, jakmile do nějaké proměnné něco uložíme a jazyk zjistí, že nebyla nikdy deklarována, sám ji založí. Do té samé proměnné můžeme ukládat text, potom objekt uživatele a potom desetinné číslo. Jazyk se s tím sám popere a vnitřně automaticky mění datový typ. V těchto jazycích jde vývoj rychleji díky menšímu množství kódu, zástupci jsou např. PHP nebo Ruby.

Statický typový systém naopak striktně vyžaduje definovat typ proměnné a tento typ je dále neměnný. Jakmile proměnnou jednou deklarujeme, není možné její datový typ změnit. Jakmile se do textového řetězce pokusíme uložit objekt uživatel, dostaneme vynadáno.

VB.NET je staticky typovaný jazyk, všechny proměnné musíme nejprve deklarovat s jejich datovým typem. Nevýhodou je, že díky deklaracím je zdrojový kód poněkud objemnější a vývoj pomalejší. Obrovskou výhodou však je, že nám kompiler před spuštěním zkontroluje, zda všechny datové typy sedí. Dynamické typování sice vypadá jako výhodné, ale zdrojový kód není možné automaticky kontrolovat a když někde očekáváme objekt uživatel a přijde nám tam místo toho desetinné číslo, odhalí se chyba až za běhu a interpret program shodí. Naopak VB.NET nám nedovolí program ani zkompilovat a na chybu nás upozorní (to je další výhoda kompilace).

VB.NET má však tzv. automatické přetypování, některé datové typy zvládne přetypovat sám. Představte si, že máme číslo 5 a chceme jej vypsat do konzole, jenomže konzole přeci nechce číslo, ona chce text. VB.NET je natolik chytrý, že si zvládne přévest 5 na "5" a to teprve vypíše do konzole. Stejně tak zvládne převést desetinné číslo na normální číslo. Později se dozvíte, že nakonec i ten Objekt uživatel lze s klidem převést na text, jen to musíte svým způsobem nastavit.

Pojďme si nyní něco naprogramovat, ať si nabyté znalosti trochu osvojíme, s teorií budeme pokračovat až příště. Řekněme si nyní tři základní datové typy:

  • Celá čísla: Integer
  • Desetinná čísla: Single
  • Textový řetězec: String

Program vypisující proměnnou

Jelikož budeme dělat 3 aplikace, vytvoříme jedno řešení (solution). Otevřete si VS, vyberte File > New > Project. V templates se přepněte na: Other project type > Visual Studio Solutions a vyberte šablonu Blank solution, pojmenujte ji DruhyProgram. Potvrďte dialog.

Uvidíte prázdné Visual studio. Aby jste mohli vytvořit aplikace v řešení, musíte mít zobrazené okno Solution explorer. Zobrazíte jej buďto v nabídce View nebo klávesovou zkratkou Ctrl + Alt + L. V Solution exploreru klikněte pravým na položku s názvem řešení a vyberte Add > New project. Dialogové okno New project je velmi podobné oknu, kterým jste zakládali svůj první program. Vyberte tedy Visual Basic a Console application, pojmenujte ji Výpis proměnné.

Vygeneruje se vám stejný kód jako minule, to se u konzolových aplikací nebude měnit. Jako minule i teď budeme psát do metody Main, jen doplním, že je to metoda, která se spouští po spuštění programu a po dokončení metody se ukončí i aplikace.

Do metody Main napište následující kód:

Dim cislo As Integer
cislo = 56
Console.WriteLine(cislo)
Console.ReadKey()

Projdeme si to. První řádek nám deklaruje do paměti proměnnou, jmenuje se cislo a má datový typ Integer. Pro deklaraci proměnné se používá klíčové slovo Dim následované názvem proměnné, datový typ je dobrovolný, pokud ho vynecháme, do prvního nastavení proměnné bude tento typ Object. Po prvním nastavení proměnné se (pokud ještě nebyl) definuje i datový typ. Je doporučeno uvádět datový typ už při deklaraci. Druhý řádek nastavuje proměnné hodnotu. Hodnota proměnné se nastavuje tak, že uvedeme název proměnné, operátor rovná se a hodnotu. V tomto případě jsme do proměnné nastavili hodnotu 56. Třetí a čtvrtý řádek by vám neměl být cizí, všimněte si však, že metoda WriteLine(String) požaduje první parametr typu String (textový řetězec), my však programu předáváme Integer, VB.NET převede hodnotu typu Integer na String automaticky.

Aplikaci zkompilujte a spusťte klávesou F5.

Konzolová aplikace
56

Program papoušek

Vytvořte si nový projekt s názvem Papoušek.

Minulý program byl poněkud nudný, zkusme nějak reagovat na vstup od uživatele. Napíšeme program papoušek, který bude dvakrát opakovat to, co uživatel napsal. Ještě jsme nezkoušeli z konzole nic načítat, ale je to velmi jednoduché. Slouží k tomu metoda ReadLine, která nám vrátí textový řetězec z konzole. Zkusme si do programu papoušek napsat následující kód:

Console.WriteLine("Ahoj, jsem virtuální papoušek Lóra, rád opakuji!")
Console.WriteLine("Napiš něco :")

Dim vstup As String
vstup = Console.ReadLine()

Dim vystup As String
vystup = vstup & ", " & vstup & "!"
Console.WriteLine(vystup)
Console.ReadKey()

To už je trochu zábavnější :) První dva řádky jsou jasné, dále deklarujeme textový řetězec vstup. Do vstup se přiřadí hodnota z metody ReadLine na konzoli, tedy to, co uživatel zadal. Pro výstup si pro názornost zakládáme další proměnnou typu textový řetězec. Zajímavé je, jak do vystup přiřadíme, tam využíváme tzv. konkatenace (spojování) řetězců. Pomocí operátoru & (napíšete jej pomocí kombinace kláves Alt + 38) totiž můžeme spojit několik textových řetězců do jednoho a je jedno, jestli je řetězec v proměnné nebo je explicitně zadán v uvozovkách ve zdroj. kódu. Do proměnné tedy přiřadíme vstup, dále čárku, znovu vstup a poté vykřičník. Proměnnou vypíšeme, vyčkáme na stisk klávesy a skončíme.

Zkuste spustit aplikaci klávesou F5. Pokud máte Visual studio ve výchozím nastavení, nyní se vám spustí aplikace výpis proměnné, je to proto, že Visual studio má nastaveno, aby spouštělo aplikaci výpis proměnné a ne našeho papouška. Pokud nevidíte Solution explorer, zobrazte si jej. Klikněte pravým na projekt Papoušek a ze zobrazené kontextové nabídky vyberte Set as startup project. Nyní znova stiskněte F5, již se spustí papoušek.

Konzolová aplikace
Ahoj, jsem virtuální papoušek Lóra, rád opakuji!
Napiš něco:
Nazdar ptáku
Nazdar ptáku!, Nazdar ptáku!

Do proměnné můžeme přiřazovat již v její deklaraci, můžeme tedy nahradit:

Dim vstup As String
vstup = Console.ReadLine()

za:

Dim vstup As String = Console.ReadLine()

Postup přiřazování hodnoty hned v deklaraci je doporučován. Kód by šel zkrátit ještě více, ale to si už můžete zkusit sami.

Jednoduchá kalkulačka

V řešení si znovu vytvořte nový projekt. Tentokrát se bude jmenovat (zcela neobvykle :) ) Kalkulačka. Rovnou si jej nastavte jako výchozí pro spouštění.

Ještě jsme nepracovali s desetinnými čísly, zkusme si napsat slibovanou kalkulačku. Bude velmi jednoduchá, na vstup přijdou dvě čísla, program poté vypíše výsledky pro sčítání, odčítání, násobení a dělení.

Console.WriteLine("Vítejte v kalkulačce")
Console.WriteLine("Zadejte první číslo")
Dim cislo1 As Single = Console.ReadLine()
Console.WriteLine("Zadejte druhé číslo")
Dim cislo2 As Single = Console.ReadLine()
Dim soucet As Single = cislo1 + cislo2
Dim rozdil As Single = cislo1 - cislo2
Dim soucin As Single = cislo1 * cislo2
Dim podil As Single = cislo1 / cislo2
Console.WriteLine("Součet: " & soucet)
Console.WriteLine("Rozdíl: " & rozdil)
Console.WriteLine("Součin: " & soucin)
Console.WriteLine("Podíl: " & podil)
Console.WriteLine("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")
Console.ReadKey()

Konzolová aplikace
Vítejte v kalkulačce
Zadejte první číslo:
3,14
Zadejte druhé číslo:
2,72
Součet: 5,86
Rozdíl: 0,42
Součin: 8,5408
Podíl: 1,15441176470588
Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.

Přetypování

Naokraj tu ještě zmíním přetypování. To ve VB.NET probíhá obvykle automaticky, můžete si to však vynutit. Přetypování znamená, že převedete nějakou hodnotu na jiný typ. Uvedu příklad: máme číslo (Integer) 10 a chceme z něj desetinné číslo (Double nebo Single) 10.00. Provedeme to následovně:

Dim cisloInteger As Integer = 10
Dim cisloDouble As Double = CDbl(cisloInteger)

nebo například ze Stringu:

Dim cisloString As String = "5"
cisloInteger = CInt(cisloString)

Jak vidíte k přetypování se používají metody, které nejsou součásti žádné třídy a jejich název začíná velký písmenem C a následně obvykle třemi písmeny z datového typu na který chceme hodnotu převést. Všechny přijímají parametr typu object, tedy tam můžete dát cokoliv. Těmi nejpoužívanějším jsou:

  • CInt(object)
  • CStr(object)
  • CDbl(object)

Všechny programy máte samozřejmě opět v příloze. Zkoušejte si vytvářet nějaké podobné, znalosti již k tomu máte. :) V příští lekci, Typový systém podruhé: Datové typy, se podíváme podrobněji na datové typy.


 

Stáhnout

Staženo 330x (235.29 kB)
Aplikace je včetně zdrojových kódů v jazyce VB

 

 

Článek pro vás napsal Michal Žůrek (misaz)
Avatar
Jak se ti líbí článek?
9 hlasů
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity (8)

 

 

Komentáře
Zobrazit starší komentáře (1)

Avatar
Michal Žůrek (misaz):14.7.2013 19:17
Dim vstup As String = Console.ReadLine()

by šlo zkrátit na:

Dim vstup = Console.ReadLine()

Datový typ je nepovinný, kompilátor si ho najde. Stejně tak je tomu v cyklech

FOR:

For i As Integer = 0 To 5
For i = 0 To 5

FOR EACH:

For Each prvek As String in polePrvku
For Each prvek in polePrvku
Odpovědět 14.7.2013 19:17
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):14.7.2013 19:18

Jinak jde ještě zkrátit název proměnné, ale to jde na úkor přehlednosti a nedoporučuje se to :)

Odpovědět 14.7.2013 19:18
Nesnáším {}, proto se jim vyhýbám.
Avatar
Libor Šimo (libcosenior):14.7.2013 19:27

Ďakujem, toto som netušil, pretože v lekcii si písal, že VB.NET je staticky typovaný jazyk.

Odpovědět 14.7.2013 19:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michal Žůrek (misaz):14.7.2013 19:30

však je. Měl bych být zcela přesný, tak v té ukázce

Dim vstup = Console.ReadLine()

se stane následující:
1.) deklaruje se proměnná vstup typu Object
2.) proměnná vstup se přetypuje na typ, který vrací metoda ReadLine(), tedy string
3.) do proměnné vstup se dosadí textový řetězec.

Odpovědět  -1 14.7.2013 19:30
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Libor Šimo (libcosenior):14.7.2013 19:38

Jasne, to je celkom zaujímavé.

Console.WriteLine("Zadaj číslo na umocnenie:")
Dim cislo = Console.ReadLine()
Console.WriteLine("Výsledok: " & cislo * cislo)
Console.ReadKey()

V tomto prípade sa to prispôsobí vstupu. Ak zadám celé číslo, počíta s celým. Ak zadám desatinné, tak s desatinným.
Veľmi zaujímavé.

Odpovědět  +1 14.7.2013 19:38
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michal Žůrek (misaz):14.7.2013 19:44

jo, ale v:

Dim cislo = Console.ReadLine()

je string. a když s ním chceš počítat (cislo * cislo), tak se přetypuje. To je na VB.NET zajímavé a podle mě je to zde lépe řešono než v c#, kde na to musíš volat spoustu metod.

Odpovědět 14.7.2013 19:44
Nesnáším {}, proto se jim vyhýbám.
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Luboš Satik Běhounek:14.7.2013 19:53

Achjo, zase špatně :)

Dim vstup = Console.ReadLine()

je ekvivalent

var vstup = Console.ReadLine();

A tohle neznamena, ze promenna vstup je typu objekt, do ktereho se ulozi string. Tady prekladac rovnou pozna, ze mu prijde jako vystup String, takze je uplne to to same, jako kdyby jsi vstup uz od zacatku deklaroval jako String.

Odpovědět 14.7.2013 19:53
https://www.facebook.com/peasantsandcastles/
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Luboš Satik Běhounek:14.7.2013 20:07

Jinak kdyz do

Console.WriteLine()

jako parametr posles samotne cislo, tak se neprovede zadne automaticke pretypovani, ale jen tim volas pretizenou verzi, ktera jako argument cislo bere.

Odpovědět 14.7.2013 20:07
https://www.facebook.com/peasantsandcastles/
Avatar
Marty
Člen
Avatar
Marty:8.4.2014 18:19

Super, zatím to jde rychle :-) uvidíme v pokročilejších kapitolách, díky moc za tento tutoriál ;-) P.S.: Vím, že je to docela hloupá otázka, ale čistě hypoteticky, za jak dlouho se dá naučit VB.NET na takovou úroveň abych mohl psát pluginy do SAPu ? (Při každodenním učení a dejme tomu že bych byl průměrný žák :-D ) Díky moc

Odpovědět 8.4.2014 18:19
Cacacio matutina est tamquam medicina
Avatar
Odpovídá na Marty
Michal Žůrek (misaz):8.4.2014 18:30

těžko odhadnout, měsíc - nekonečno.

Odpovědět  +1 8.4.2014 18:30
Nesnáším {}, proto se jim vyhýbám.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 11. Zobrazit vše