VB.NET - díl 4.
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

VB.NET - díl 4.VB.NET - díl 4.

 

VB.NET - díl 4.

Google       Google       28. 8. 2009       15 802×

V dalším díle seriálu si probereme cykly, pole a ošetřování výjimek.

Reklama
Reklama

V tomto díle se podíváme na další důležitou část jazyka VB.NET, a to sice cykly. Také se naučíme pracovat s kolekcemi a zjistíme, jak ošetřit výjimky vzniklé za běhu programu. Také bych se chtěl omluvit za velmi dlouhý interval mezi tímto a předchozím dílem, ale pracoval jsem na jednom projektu a nemohl jsem si najít čas. Doufám, že jste zatím na tento kurz nezanevřeli.

Cykly

Cyklus, jak už jeho název naznačuje, je část programu, která vykonává dokola nějakou činnost. Prvním z cyklů, které si ukážeme, je While. Cyklus While se opakuje tak dlouho, dokud platí zadaná podmínka:

Dim i As Integer = 0
While i < 10
  Console.WriteLine(i) 'Vypiš i.
  i += 1 'Přičti k i jedničku a skoč na začátek cyklu.
End While

Cyklus While je dost možná nejpoužívanější cyklus ve všech programovacích jazycích. Dalším cyklem je Do, který je téměř identický s While, ale jeden podstatný rozdíl existuje: cyklus While nejprve testuje podmínku a až pak provádí tělo cyklu, takže pokud je podmínka už na začátku nepravdivá, neprovede se tělo cyklu ani jednou. Narozdíl od toho, Do napřed provede tělo cyklu a až potom testuje podmínku, čili tělo cyklu se vždy provede alespoň jednou:

Dim i As Integer = 0
Do
    Console.WriteLine(i)
    i += 1
Loop While i > 10
'Podmínka se vyhodnotí jako False.
'Cyklus While by nebyl proveden ani jednou.
'Cyklus Do se provede alespoň jednou a
'do konzole se vypíše: 0.

nebo

Dim i As Integer = 0
Do
    Console.WriteLine(i)
    i += 1
Loop Until i > 10
'Loop Until je téměř totéž
'jako Loop While, ale
'provádí se pouze, pokud
'je podmínka vyhodnocena
'jako False.

nebo

Dim i As Integer = 0
Do Until i > 10
    Console.WriteLine(i)
    i += 1
Loop
'Stejné, ale podmínka 
'se testuje ještě před
'provedením cyklu.

Dalším, trochu jiným cyklem je For. Ten je specifický tím, že už na začátku cyklu je určeno, kolikrát proběhne. Vypadá to takto:

Dim i As Integer
i = Integer.Parse(Console.ReadLine())
Console.WriteLine()
For o As Integer = 0 To i Step 1
    Console.WriteLine(o)
Next

Část Step je nepovinná, pokud chcete cyklus, ve kterém bude proměnná o po každém zopakování narůstat o jedničku. Pokud byste ale chtěli, aby proměnná o klesala o jedničku nebo naopak narůstala o 2, napsali byste Step -1 nebo Step 2.

Pole

Pole (angl. array) je proměnná, která uchovává více hodnot stejného typu. Pokud byste chtěli vytvořit pole pro typ Integer, napsali byste toto (prvky pole jsou číslovány od nuly, tzn. první prvek má číslo 0):

Dim intArray(2) As Integer
'Vytvoří pole Integerů, do kterého se vejdou
'tři proměnné.
intArray(0) = 1
'První proměnné v poli přiřadí hodnotu 1.
intArray(1) = 8
'Druhé proměnné v poli přiřadí hodnotu 8.
intArray(2) = 16
'Třetí proměnné v poli přiřadí hodnotu 16.

'Pole lze také inicializovat takto:

Dim secondIntArray() As Integer = {2, 4, 6}
'Vytvoří pole Integerů a přiřadí do něj hodnoty 2, 4, a 6.
'Velikost pole se odvodí při kompilaci.
Console.WriteLine(secondIntArray(2))
'Vypíš třetí prvek pole, tedy číslo 6.

Když už máme pole vytvořené, potřebujeme nějaký způsob, jak jej projít a získat jeho hodnoty. K tomu můžeme využít jednoduchý cyklus For:

Dim secondIntArray() As Integer = {2, 4, 6}
For i As Integer = 0 To secondIntArray.Length - 1
    'Indexy pole začínají nulou, proto Length - 1.
    'Length je vlastnost pole určující jeho velikost.
    Console.WriteLine(secondIntArray(i))
    'Přístup k prvku pole s indexem i.
Next

Nebo můžeme využít sofistikovaný nástroj pro procházení kolekcí, a tím je cyklus For Each:

Dim secondIntArray() As Integer = {2, 4, 6}
For Each i As Integer In secondIntArray
  Console.WriteLine(i)
Next

Ošetřování výjimek

Výjimka je zvláštní událost, ke které dojde při běhu programu, pokud se někde stala chyba. Ukázka:

Sub Main()
    Dim i As Integer = Integer.Parse("Honza")
    'Zde program skončí, protože dojde k výjimce typu
    'FormatException - "honza" se nedá převést na číslo.
End Sub

Klidně si tento příklad spusťte - nic se nestane, až na to, že program nefunguje. Nyní si ukážeme, jak tomuto předejít. Program počká na vstup uživatele a sdělí, zda jde o číslo, nebo ne:

Sub Main()
    Dim s As String = Console.ReadLine()
    Try
        Dim i As Integer = Integer.Parse(s)
        Console.WriteLine("Zadaná hodnota je číslo.")
    Catch ex As Exception
        Console.WriteLine("Zadaná hodnota není číslo.")
    End Try
End Sub

V tomto úryvku kódu jsme se setkali s novou konstrukcí jazyka VB.NET - blok Try ... Catch. Ten slouží právě k odchycení a ošetření vzniklé výjimky. Kód, který může vyvolat výjimku, uzavřeme do bloku Try, kód který bude výjimku ošetřovat, do bloku Catch. To "ex As Exception" určuje, jaký typ výjimky budeme ošetřovat. Protože Exception je základní typ výjimky, bude blokem Catch ex As Exception ošetřena každá výjimka, ke které dojde v bloku Try. Mohli bychom ale také napsat:

    Try
        'Nějaký kód...
    Catch ex As FormatException
        'Ošetří výjimku typu FormatException.
    Catch ex As OverflowException
        'Ošetří výjimku typu OverflowException.
    Catch ex As Exception
        'Ošetří všechny ostatní výjimky.
    End Try

Blok Try ... Catch má ještě jednu speciální část, a tou je blok Finally. Ke kódu v bloku Finally dojde vždy, ať už testovaný kód vyvolá výjimku či ne:

Sub Main()
    Dim s As String = Console.ReadLine()
    Try
        Dim i As Integer = Integer.Parse(s)
        Console.WriteLine("Zadaná hodnota je číslo.")
    Catch ex As Exception
        Console.WriteLine("Zadaná hodnota není číslo.")
    Finally
        Console.WriteLine("Test ukončen")
    End Try
End Sub

Opět upozorňuji, pokud máte jakýkoli problém, napište do komentářů.

Praktický příklad

A nastal čas na praktickou ukázku toho, co jsme se naučili. Napíšeme si program, který bude fungovat jako kalkulačka - nechá uživatele provádět základní aritmetické operace zadáním něčeho jako "+42" do konzole:

    Sub Main()
        Console.WriteLine("Vítejte v programu Konzolová kalkulačka 1.0")
        Console.WriteLine()
        Dim quit As Boolean = False
        'Indikuje, zda má být program
        'ukončen, nebo ne.
        Try
            'Načti počáteční hodnotu.
            Dim start As Double = Double.Parse(Console.ReadLine())
            Console.WriteLine()
            'Opakuj, dokud v proměnné quit nebude True.
            While Not quit
                Dim input As String = Console.ReadLine()
                'Načti vstup (např. +8).
                Dim numberPart As Double
                If input.Length > 0 Then
                    numberPart = Double.Parse(input.Substring(1))
                    'Získej z něho numerickou část. Funkce Substring vrací
                    'část daného řetězce. input.Substring(1) například vrátí znaky 2 
                    '- poslední znak řetězce.
                Else
                    numberPart = 0.0
                    Continue While
                    'Pokud tam uživatel nic nezadal, necháme ho to zkusit
                    'znova. Příkaz Continue jednoduše přeskočí
                    'jedno procházení cyklu a skočí zase na začátek.
                End If
                Dim writeToOutput As Boolean = True
                'Chceme vypsat výsledek na výstup?
                Select Case input.Substring(0, 1)
                    'Tady vrací Substring pouze první znak řetězce
                    '(začíná od prvního a vezme jeden znak).
                    Case "+"
                        start += numberPart
                    Case "-"
                        start -= numberPart
                    Case "*"
                        start *= numberPart
                    Case "/"
                        'U datového typu Double je výsledek dělení nulou
                        'nekonečno. To je bohužel dále nepoužitelné.
                        If numberPart <> 0 Then
                            start /= numberPart
                        Else
                            'Sami vyvoláme vyjímku DivideByZeroException.
                            Throw New DivideByZeroException("Pokus o dělení nulou!")
                        End If
                    Case "\"
                        start \= numberPart
                    Case "="
                        'Nedělej nic.
                    Case Else
                        Throw New FormatException("Invalid input!")
                End Select
                'Vypíšeme na výstup dosavadní výsledek.
                If writeToOutput Then Console.WriteLine(start)
                Console.WriteLine()
            End While
        Catch ex As FormatException

        Catch ex As DivideByZeroException
            Console.WriteLine("Je mi líto, ale nulou dělit nelze.")
        End Try
    End Sub

Domácí úkol

Pro tuto lekci žádný domácí úkol nebude. Zkuste si napsat nějaký zajímavý program, využívající to, co jsme se dnes naučili, a jestli chcete, pošlete mi ho. Teším se na viděnou u dalšího dílu.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor se věnuje programování v jazycích C# a Visual Basic.NET v propojení s ASP.NET. Také občas programuje v Javě a okrajově v C/C++;

Nové články

Obrázek ke článku NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý