spájame
slovenskú
IT komunitu
pridaj sa
Registrácia · Login
FrewCen 8.7.2012
Hodnoť článok:
5 2

C# - 4. diel

Podmienky if - else

Tento diel by vám mal ukázať, ako sa vetví program.

Príkazy if-else

Spomeňte si na všetko, čo doteraz viete o programovaní v jazyku C#. Predstavte si, že by ste mali z týchto vedomostí poskladať program, čiže proste nejakú jednoduchú aplikáciu. Ak máte teda nejakú myšlienkovú predstavu o programe a jeho fungovaní, pokračujte čítaním ďalej.

Pomyslite na ten kód. Všetko prebieha lineárne, rad za radom. Vypíše sa uvítacia správa, zadá sa meno, pozdraví sa daná osoba a tak ďalej...
Avšak takto normálne väčšie aplikácie nefungujú. Budete tam cítiť niečo iné. To čo sa už viac približuje ľudskej logike. Človek nepracuje tak, že príde, pozdraví sa, opýta sa na meno, opýta sa na vek a podobne. Nie. Na základe spoločnosti a okolností v ktorých sa nachádza zvolí vhodnú frázu pre začiatok diskusie. Ďalej hodnotí človeka na základe mena, prízvuku, výslovnosti a rýchlosti reči, aby zistil z ktorej oblasti slovenska je (ak je zo slovenska) a do akej spoločenskej vrstvy asi patrí. Na základe rýchlosti vydávania informácií zistí či je človek viac introvertný alebo extrovertný... Overuje, zaraďuje na základe zozbieraných skúseností. Toto lineárne fungujúci program nedokáže. A preto sa programy vetvia.

Takzvané vetvenie programov zabezpečujú hlavne príkazy if a else. Príkaz if overí, či sú podmienky zadané v kóde splnené a na základe toho vykoná nejakú činnosti. Inak normálne pokračuje alebo vykoná náhradnú činnosť a až tak pokračuje.
Samotný príkaz if pracuje len s hodnotami typu bool, čiže true a false.
Na to, aby sme tieto hodnoty dostali musíme my alebo naše či cudzie metódy vykonať operáciu porovnávania. Operácia porovnávania má šesť základných operátorov. Ak podmienka daná operátormi platí, operátor vracia true. V opačnom prípade vracia false.

Operátor Popis
== Overí, či sa dva operandy rovnajú
!= Overí, či sa dva operandy nerovnajú
< Overí, či je ľavý operand menší
> Overí, či je ľavý operand väčší
<= Overí, či sa dva operandy rovnajú alebo či je ľavý operand menší
>= Overí, či sa dva operandy rovnajú alebo či je ľavý operand väčší

Poznámka: Nemýľte si operátor '>=' s operátorom '=>'! Jedná sa o dva úplne rozdielne operátory, pričom prvý slúži na porovnávanie a druhý na predanie argumentov lambda výrazu. (O lambda výrazoch bude reč neskôr)
Kedže operátory porovnávania vracajú výslednú hodnotu Booleanu, ide ich výsledok priradiť premennej tohoto typu.

int cislo = 10;
bool vysledokPorovnavania = 11 == cislo;

Toto využitie operátoru vráti hodnotu false. Využitie operátoru != by zase vrátilo hodnotu true, pretože sa hodnoty operandov nerovnajú.

Porovnávanie ale nie je samotným vetvením programu. Vetvenie zabezpečujú, ako už bolo povedané vyššie, príkazy if a else.
Syntax:

if(podmienka)
    //vykonaj nejakú akciu.
else
    //vykonaj nejakú inú akciu.

alebo

if(podmienka)
{
    //vykonaj nejakú dlhšiu akciu.
}
else
{
    //vykonaj nejakú inú dlhšiu akciu.
}

Poznámka: To, že uzavrieme dlhšiu akciu (viac ako jedno syntaxné použitie bodkočiarky) do bloku príkazu if alebo else neznamená, že v ňom musí byť aj akcia druhého bloku, ak samozrejme nespadá do podmienok využitia bloku.

Viac ako všetká teória na niekoľko strán bude praktická ukážka. Následujúci program si vypýta vek a zistí, či môže osoba s takým vekom požívať alkoholické nápoje.

int hranicaDospelosti = 18;
Console.WriteLine("Zadajte prosím váš vek: ");
string vek = Console.ReadLine();
int zadanyVek = Int32.Parse(vek);
if (zadanyVek < hranicaDospelosti)
    Console.WriteLine("V serióznej krčme ti nenalejú, bohužiaľ.");
else if (zadanyVek < 100)
    Console.WriteLine("V seróznej krčme vám nalejú.");
else
    Console.WriteLine("V takom veku alkohol?");
Console.Read();

Test prvý:

Zadajte prosím váš vek:
10
V serióznej krčme ti nenalejú, bohužiaľ.

Test druhý:

Zadajte prosím váš vek:
18
V seróznej krčme vám nalejú.

Test tretí:

Zadajte prosím váš vek:
101
V takom veku alkohol?

Za povšimnutie určite stoja dve veci:

  • Na štvrtom riadku je volaná metóda Parse z typu Int32 (alias int). Táto metóda preberá reťazec a vracia celé 32 bitové číslo. Je to jedna z podporných metód .NET frameworku. Nájdete ju aj v iných číselných typoch. Metódu je možné volať aj skrz alias, čiže volanie by mohlo vyzerať aj takto:
    int.Parse(vek);
    
  • Na siedmom riadku sme napojili na príkaz else (patriaci prvej podmienke) druhú podmienku. Jedná sa o oddelený príkaz, takže varianty 'elseif', 'elif' a pod. v jazyku C# nefungujú. Posledný príkaz else na riadku 9 už ale nepatrí prvej podmienke, ale druhej. Jedná sa o zlepšovák ktorý sa dobre číta a výborne slúži.

Vyhodnotenie porovnávania je možné vykonať ešte pred tým, než sa začne overovanie.

int a = 10;
int b = 15;
bool porovnaj = a == b;
...
//kód pracujúci s premennými 'a' a 'b'.
...
if(porovnaj)
   //akcia, ak sa čísla rovnajú
else
   //akcia, ak sa čísla nerovnajú

Tento spôsob je výhodný v prípade, že pred vetvením programu potrebujete pracovať s operandmi.
Kedže podmienka if pracuje s booleanovskou hodnotou, je možné zapísať aj tento kód:

if (true)
   Console.WriteLine(true);
else Console.WriteLine(false);
Console.Read();

Avšak využitie tohoto kódu nemá žiadny význam.

Niekedy je zase potrebné vetviť program v prípadoch keď platí viac podmienok. Na to existujú v jazyku C# logické operátory.

  • &&: Logické AND spája dva výrazy a vracia true iba ak platia obidve podmienky.
  • ||: Logické OR spája dva výrazy a vracia true ak platí jedna z podmienok či jedna zo skupín podmienok.

Príklad využitia:

int vek = 22;
int dospelost = 18;
int soferak = 17;

if(vek < soferak && vek < dospelost)
    Console.WriteLine("Nemôžeš riadiť auto, piť alkohol a fajčiť.");
else if(vek < dospelost)
    Console.WriteLine("Môžeš riadiť auto, ale nemôžeš piť ani fajčiť.");
else
{
    Console.WriteLine("Môžeš riadiť auto, piť a fajčiť.");
    if(vek == 50 || vek % 10 == 0)
        Console.WriteLine("Blahoželám k životnému jubileu!");
}

Momentálne ste zoznámení so základným vetvením programu v jazyku C#.
Môžete pokračovať čítaním ďalšieho dielu, v ktorom sa dozviete niečo o poliach.

Hodnoť článok:
5 2


12 komentárov k článku:

Komentovať môžu iba prihlásení

Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)

Prihlás sa tu, ak už máš profil na Zajtra.sk:


Zabudol som heslo

0 0 FrewCen 17.7.2012 12:18:31
http://www.simple-talk.com/blogs/2012/03/28/net-vs-windows-8/
K tomu, Microsoft naďalej plánuje pokračovať v .NET a nové Visual Studio ma v sebe naďalej zabudovanú podporu. Takže Win8 ešte nerobí kompletnú bodku na .NET.
0 0 tester 17.7.2012 10:39:56
bunka: ked uz, v kurze je Objective C a C.
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

btw: C# a C++ je natom skoro rovnako, ale stale viac vyuzivane ako PHP, JS, Ruby etc ... klasicke webove technologie.
0 0 Bunak 17.7.2012 09:58:00
Není C# tak trochu s křížkem po funuse, když MS přestal ve W8 podporovat .NET framework s tím, že není třeba další nadstavba nad RT a doporučuje vývojářům přejít na C++?
0 0 FrewCen 10.7.2012 10:23:10
S poliami to ešte nebude také rýchle. Nemám momentálne veľa času. Uvidím však čo sa dá robiť.
0 0 Roland Dobos 9.7.2012 21:27:45
dobrý článok a doteraz aj seriál celkovo ;] na polia budem zvedavý, keďže C# som sa už nedávno venoval, ale k nim som sa nedostal... len tak ďalej! ;]
0 0 FrewCen 9.7.2012 13:19:48
Stačí. Ale istota je guľomet.
0 0 Michal Chovanec 9.7.2012 13:07:31
to nieje podstatné stačí jedna podmienka
0 0 FrewCen 9.7.2012 12:47:38
Isteže. Lenže hranica dospelosti je v niektorých krajinách až 20 rokov. Preto tá druhá podmienka.
0 0 Michal Chovanec 9.7.2012 11:36:05
v prvej podmienke stačí toto:
if (vek < soferak)
a potom:
else if (vek < dospelost)
0 0 tester 8.7.2012 20:57:58
aha, cize staci uz len rozsirovat logiku a netreba zapisovat cele znova. tak super .. dik za objasnenie :)
0 0 FrewCen 8.7.2012 19:38:45
Mierne sa mylis.
My z kontextu vieme, ze dany cloevek ma uz minimalne sedemnast, lebo to bolo v predoslej podmienke. A my sme na nu navezovali (else if).
0 0 tester 8.7.2012 19:03:14
nie som developer, takze sa to snazim len citat podla mojej logiky, ale myslim si ze toto nie je spravne zapisane:

else if(vek < dospelost)
Console.WriteLine("Môžeš riadiť auto, ale nemôžeš piť ani fajčiť.");

malo by byt:
if(vek < dospelost && vek >= soferak)

ak sa mylim tak ma opravte
Zajtra.sk > Programovanie > Seriály > C# - 4. diel


Kritika

Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!

Reklama

Seriály zo Zajtra.sk

Reklama