Základ C# 7 – Metódy [Methods]

Metódy, nazývané aj funkciami [function] či procedúrami [procedure], sú extrémne dôležitou časťou programovania a dovoľujú nám zjednodušiť hľadanie chýb a písanie programu.

Programy, ktoré sme doteraz písali boli jednoduché a krátke. Pri písaní väčších programov nastanú mnohé problémy, a to ako sa v takom množstve kódy vyznať, kde nájsť chybu keď vznikne alebo jedna z nepríjemných vecí – napísanie tých istých 30 riadkov kódu stále dokola a dokola.

Tieto problémy nám pomáhajú riešiť práve metódy. Pomocou nich môžeme rozdeliť program na niekoľko častí, a tieto časti jednoducho použiť. Z rôznymi metódami sme sa už stretli – napríklad WriteLine, ReadLine alebo aj s metódou Main.

Tvorba metódy

Spôsob ako vytvoriť novú metódu je jednoduchý. Na jej vytvorenie stačí určiť jej typ, meno, parametre a čo bude robiť.

void HelloWorld()
{
   Console.WriteLine("Hello World!");
}

Toto je jednoduchá metóda, špeciálneho dátového typu void, jej meno je HelloWorld a nemá žiadne parametre – tie sú zadávané do zátvoriek za definíciu metódy. Telo tejto metódy je uzavreté v bloku kódu a obsahuje príkaz na napísanie textu „Hello World!“ na obrazovku.

Metóda môže mať parametre – tie sa špecifikujú v zátvorkách pri jej definícií.

void OpakujHelloWorld(int pocet)
{
   for (int i = 0; i < pocet; i++)
   {
      Console.WriteLine("Hello, World!");
   }
}

Táto metóda má špecifikovaný parameter typu int s menom pocet. V jej tele nájdete slučku for, ktorá sa bude opakovať dokým i bude menšie ako je hodnota premennej pocet. Ak by sme spustili metódu s parametrom 3, tak sa na obrazovku napíše „Hello, World!“ 3 krát. Pokiaľ by ste sa ju však pokúsili zavolať z metódy Main, nešlo by to – táto metóda totiž nieje označená ako statická, narozdiel od metódy Main. Aby ste ju za statickú označili, stačí pred jej definíciu pridať slovo static. static void OpakujHelloWorld(int pocet)  O rôznych modifikátoroch si povieme v diely o triedach.

Zavolanie metódy

Metódu môžete spustiť tým, že ju zavoláte [call], čo ste už robili s funkciami WriteLine, ReadLine, …

Na zavolanie nami vytvorenej metódy OpakujHelloWorld stačí použiť nasledovný kód.

static void Main(string[] args)
{
   OpakujHelloWorld(3);
}

static void OpakujHelloWorld(int pocet)
{
   for (int i = 0; i < pocet; i++)
   {
      Console.WriteLine("Hello, World!");
   }
}

Týmto zavoláme metódu OpakujHelloWorld s parametrom 3 z hlavnej metódy Main.

Návratová hodnota

Metódy môžu mať istú návratovú hodnotu, ako ste už videli napríklad pri metóde ReadLine. Typ metódy je práve typ návratovej hodnoty. Doteraz sme používali typ void, čo je špeciálny typ určený len pre metódy. Je to prázdny typ – neobsahuje žiadne údaje a teda nevracia žiadnu hodnotu.

int Spocitaj(int cislo1, int cislo2)
{
   return cislo1+cislo2;
}

Týmto sme vytvorili metódu Spocitaj, ktorej typ je int a má dva parametre. Vnútri tejto metódy vydrite nové kľúčové slovo – return. To označuje hodnotu, ktorú metóda vráti – v tomto prípade vráti výsledok cislo1 + cislo2. Typ metódy môže byť akýkoľvek, ktorý je dostupný.

int vysledok = Spocitaj(3, 5);
Console.WriteLine(vysledok);

Tento kód využije metódu Spocitaj s parametrami 3 a 5. (3 bude cislo1, 5 bude cislo2) a jej výsledok uloží do premennej vysledok. Tu nakoniec vypíšeme na obrazovku cez metódu WriteLine.

Preťaženie funkcie

Preťaženie [overload] funkcie je mechanizmus, ktorý dovoľuje spraviť viacero rôznych funkcií s rovnakým meno, ale rôznymi parametrami.

void HelloWorld()
{
   Console.WriteLine("Hello, World!");
}

void HelloWorld(int pocet)
{
   for (int i = 0; i < pocet; i++)
   {
      Console.WriteLine("Hello, World!");
   }
}

Ako vidíte, funkcia Hello World je definovaná dva krát, druhý krát však má parameter pocet, ktorý určí počet opakovaní. Takúto funkciu je potom možné zavolať aj ako HelloWorld(); aj ako HelloWorld(3); a každá spraví svoju prácu.

Rekurzia

Rekurzia [Recursion] je zavolanie metódy zo seba samej. Ak to však spravíte nesprávne, môže nastať chyba.

void Rekurzia()
{
   Console.WriteLine("Rekurzia");
   Rekurzia();
}

Táto metóda napíše na obrazovku nápis „Rekurzia“ a znova sa zavolá. Tým vytvorí nekonečný kolobeh a nikdy nebude opustená. Pokiaľ toto nieje vašim cieľom, nemali by ste to robiť. Rekurzia je dobrá napríklad pri počítaní faktoriálov.

int Faktorial(int cislo)
{
   if ((cislo == 0) || (cislo == 1))
   {
      return 1;
   }
   
   return cislo * Faktorial(cislo-1);
}

Toto je jednoduchý spôsob ako vypočítať matematický faktoriál, (Faktoriál čísla 4 je 4*3*2*1=24). Táto metóda nebude volať sama seba do nekonečna. Ak je hodnota vstupného parametru cislo 1 alebo 0, vráti ako výsledok 1. Ak je však tento parameter vyšší, rekurzia prebehne a parameter je vynásobený faktoriálom o 1 menšieho vstupného parametra. Ak by ste túto metódu zavolali s parametrom 4, ako výsledok by vám vrátila číslo 24. Len pre zaujímavosť – táto metóda má chybu – skúste sa zamyslieť, či na ňu prídete.

To by ale bolo pre dnešok všetko a nabudúce sa konečne pozrieme na triedy a objekty. S nimi však pravdepodobne zostaneme dlhšie. Jedná sa o obsiahlejšie tému.

2 názory na “Základ C# 7 – Metódy [Methods]”

  1. Ahoj, chybou by mohlo byť, že ak zadáš cislo<0, tak sa program zacyklí. Dal by som uint namiesto int alebo by som zmenil:
    if ((cislo == 0) || (cislo == 1))
    na
    if (cislo < 2)

    Odhliadnuc od toho, že tu budú nesprávne výsledky:
    0! = 1
    (-n)! = -nekonečno 😉

Pridajte Komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *


The reCAPTCHA verification period has expired. Please reload the page.

Návrat hore