Zpět na seznam článků     Číst komentáře (8)     Verze pro tisk

C# - 5.díl - Větvení programu (2)

Autor: sukovanej   
28.10.2012

V tomto díle budeme pokračovat ve větvení programu. Ukážeme si, jak v programu skákat na různá místa v kódu, nebo např. složené výroky u podmínek


Struktura Switch

Switch je rozhodovací struktura mající sice jiný zápis, než podmínky if, ale fungující naprosto stejně. Nevýhodou je omezenost a porovnávání pouze jedné hodnoty a to jen rovnítkem (větší, menší, nebo nerovno nelze použít). Začněme rovnou jednoduchým příkladem.

Příklad 1
  1. string jmeno = "Milan";
  2. switch(jmeno)
  3. {
  4.     case "Milan":
  5.         MessageBox.Show("Uvedené jméno je Milan");
  6.         break;
  7. }

Klíčovým slovem je zde tedy switch. Do závorky zapíšeme, jakou hodnotu chceme porovnávat. Za klíčové slovo case zapíšeme, čemu se má hodnota rovnat, aby se provedl kód za dvojtečkou. Tento příkaz potom ukončíme klíčovým slovem break.

Pokud bychom chtěli hodnot porovnávat více, jen bychom připisovali podstruktury case.

Příklad 2
  1. string jmeno = "Milan";
  2. switch(jmeno)
  3. {
  4.     case "Milan":
  5.         MessageBox.Show("Uvedené jméno je Milan");
  6.         break;
  7.     case "Martin":
  8.         MessageBox.Show("Uvedené jméno je Martin");
  9.         break;
  10. }

V případě, kdy očekáváme, že může nastat i úplně jiná možnost, než máme ošetřenou, využijeme podstrukturu default.

Příklad 3
  1. string jmeno = "Milan";
  2. switch(jmeno)
  3. {
  4.     case "Milan":
  5.         MessageBox.Show("Uvedené jméno je Milan");
  6.         break;
  7.     case "Martin":
  8.         MessageBox.Show("Uvedené jméno je Martin");
  9.         break;
  10.     default:
  11.         MessageBox.Show("Uvedené jméno je neznámé");
  12.         break;
  13. }

Je myslím jasně vidět, že vše, co lze napsat pomocí switch lze napsat stejně dobře i s pomocí podmínek if. Po čase pravděpodobně zjistíte (nebo už teď v tom máte jasno), že podmínky if jsou rychlejší, intuitivnější, jednodušší. Jednou z nevýhod v používání switch je právě spousta klíčových slov, které při programování většinou zdržují, ale je samozřejmě na vás, jaký způsob větvení v které situaci použijete.

Klíčové slovíčko goto

V programátorské hantýrce často popisovaná adjektivem "evil". Příkaz goto slouží ke skoku ve zdrojovém kódu na předem označené místo. Většinou se tak stane po splnění nějaké podmínky.

Představme si reálnou situaci, kdy chceme po uživateli zadat heslo potřebné pro přístup do systému. Budeme postupovat tak, že mu zobrazíme výzvu o zadání hesla. Pokud se heslo požadované a heslo zadané shoduje, pokračujeme dále. V případě, kdy se ale hesla neshodují, pomocí příkazu goto přeskočíme na místo v kódu, kdy se uživatele ptáme na heslo a takto pořád dokola, dokud heslo nezadá správně.

V moderním objektově orientovaném programování to samozřejmě potřeba není. Máme události a při pokusu o přihlášení jen vyvoláme událostní proceduru a zkontrolujeme shodnost hesla, pokud se neshodují, nic se prostě nestane, pokud se shodují, necháme (např.) zobrazit nějaké nové okno s uživatelským rozhraním.

Jen si ukážeme jeden jednoduchý příklad využití goto.

Příklad 4
  1. string jmeno = "Milan";
  2.  
  3. skok : // sem se skočí po vykonání příkazu
  4.  
  5. switch(jmeno)
  6. {
  7.     case "Milan":
  8.         MessageBox.Show("Uvedené jméno je Milan");
  9.         goto skok;
  10. }

Toto je příklad nekonečného cyklu. Co že jsme to udělali ? Máme podmínku, že když je proměnná jmeno rovna hodnotě Milan, zobrazíme vyskakovací okno. Potom skočíme na začátek podmínky a jedeme od začátku. Takto se to bude opakovat pořád dokola. Zde je zajímavé, že klíč. slovo goto zastupuje break. Je třeba na to dávat pozor.

Složené výrazy u podmínek

Touto kapitolou se odvolávám na minulý díl. Pokud jste cokoli z něho zapomněli, nebo neporozuměli, raději si ho znovu pročtěte, ať můžeme pokračovat dále.

Začnu opět příkladem, abychom viděli důležitost a použitelnost věci. Předpokládejme situaci, kdy máme zadané reálné číslo a chceme provést nějaký kód v případě, kdy se rovná buď číslo 3,14 a nebo 2,72.

Kvíz: O jaké konstanty (jsou samozřejmě zaokrouhlené) se jedná a k čemu slouží - pište do komentářů !

S našimi nynějšími znalostmi bychom sestrojili asi nějaký takovýto kód.

Příklad 5
  1. double konstanta = 3.14;
  2. if (konstanta == 3.14)
  3. {
  4.    MessageBox.Show("Toto je buď 3,14, nebo 2,72");
  5. }
  6. else if (konstanta == 2.72)
  7. {
  8.    MessageBox.Show("Toto je buď 3,14, nebo 2,72");
  9. }

Trochu krkolomné vzhledem k tomu, že pokaždé chceme provést ten jeden a samí výraz. Naštěstí v C# můžeme používat konjunkce, disjunkce (popř. i negace, abychom to měli celé). Pokud chceme při vytvoření podmínky použít disjunkci (nebo) dáme mezi výrazy || a při konjunkci (a, zároveň) &&.

Tedy :

  • Konjunkce - &&
  • Disjunkce - ||
  • negace výroku - !

Potom by náš příklad vypadal asi takto :

Příklad 6
  1. double konstanta = 3.14;
  2. if (konstanta == 3.14 || konstanta == 2,72)
  3. {
  4.    MessageBox.Show("Toto je buď 3,14, nebo 2,72");
  5. }

Závěr

To je k tomuto dílu vše. Myslím si, že největší problém v tomto dvoudíle je použitá matematika, totiž výroková logika, jinak je to jen o tom zapamatovat si, jak se podmínkové struktury zapisují.


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 2.33/6

1  2  3  4  5    
(známkování jako ve škole)