Lekce 6: Funkce a metody – Modularizace kódu v C#
Funkce a metody jsou jedním z nejdůležitějších stavebních bloků v programování. Umožňují nám rozdělit složitý program na menší, přehlednější části, které mohou být znovu použity na různých místech. Tento princip modulárního přístupu k programování nejen usnadňuje psaní a čtení kódu, ale také zvyšuje jeho udržovatelnost a snižuje množství duplicitního kódu. V této lekci se zaměříme na to, jak v C# definovat a používat funkce a metody, včetně předávání parametrů a návratových hodnot.
Co jsou funkce a metody?
V C# se termíny funkce a metody často používají zaměnitelně, i když mají malý rozdíl. Obecně lze říci, že funkce je blok kódu, který provádí určitou činnost a může vrátit výsledek. Pokud je tato funkce součástí třídy (což je běžné v objektově orientovaných jazycích, jako je C#), nazýváme ji metoda.
Metody umožňují modularizaci programu tím, že rozdělují kód do menších, opakovaně použitelných částí. Místo toho, abychom psali stejný kód několikrát, můžeme tento kód zabalit do metody a zavolat ji, kdykoli ji potřebujeme. Navíc metody zlepšují čitelnost programu a umožňují snazší ladění a testování kódu.
Definice metody
Metoda v C# se skládá z několika základních částí: návratový typ, název metody, parametry a tělo metody. Každá metoda má návratový typ, který určuje, jaký druh hodnoty metoda vrací (například int
pro celá čísla, string
pro textové řetězce nebo void
, pokud metoda nevrací žádnou hodnotu). Název metody je identifikátor, který používáme k jejímu volání. Parametry jsou volitelné a slouží k předávání hodnot metodě, aby mohla provést požadované operace.
Struktura metody:
návratový_typ název_metody(parametry)
{
// Tělo metody - kód, který se provede
return hodnota; // Pokud je návratový typ void, není nutné používat return.
}
- Návratový typ: Určuje, jaký typ dat bude metoda vracet. Pokud metoda nic nevrací, používá se
void
. - Název metody: Identifikátor metody, který používáme při jejím volání.
- Parametry: Hodnoty, které jsou předány metodě. Parametry jsou volitelné.
- Tělo metody: Blok kódu, který definuje činnost metody.
- Return: Klíčové slovo
return
vrací hodnotu z metody zpět do místa, kde byla metoda zavolána.
Příklad jednoduché metody
Zde je příklad jednoduché metody, která vypočítá součet dvou čísel a vrátí výsledek:
int Soucet(int a, int b)
{
int vysledek = a + b;
return vysledek;
}
V tomto příkladu má metoda Soucet
dva parametry typu int
(a a b). Uvnitř metody se sčítají hodnoty těchto dvou parametrů a výsledek je uložen do proměnné vysledek
. Poté je hodnota této proměnné vrácena pomocí příkazu return
.
Tuto metodu můžeme zavolat kdekoliv v programu následujícím způsobem:
int x = 5;
int y = 10;
int soucet = Soucet(x, y);
Console.WriteLine("Součet je: " + soucet);
Výstupem tohoto kódu bude:
Součet je: 15
Metody s návratovým typem void
Pokud metoda nevrací žádnou hodnotu, použijeme pro návratový typ klíčové slovo void
. Tento typ metod se používá pro operace, které provádějí činnost, ale nepotřebují vrátit výsledek.
Příklad metody s návratovým typem void
:
void Pozdrav(string jmeno)
{
Console.WriteLine("Ahoj, " + jmeno + "!");
}
Tato metoda přijímá jeden parametr typu string
(jméno osoby) a jednoduše vypíše pozdrav. Protože metoda nevytváří žádný výsledek, není třeba použít příkaz return
.
Metodu Pozdrav
můžeme zavolat následovně:
Pozdrav("Petr");
Pozdrav("Anna");
Výstup bude:
Ahoj, Petr!
Ahoj, Anna!
Parametry metod
Parametry metod umožňují předat metodě vstupní data, se kterými bude pracovat. Parametry jsou uvedeny v závorce za názvem metody a pro každý parametr je potřeba uvést jeho typ. Parametrů může být libovolný počet a oddělují se čárkou.
Parametry mohou být také volitelné, pokud jsou inicializovány výchozí hodnotou.
Příklad metody s více parametry:
int Vynasob(int a, int b)
{
return a * b;
}
Při volání této metody musíme předat dva argumenty, například:
int vysledek = Vynasob(3, 4);
Console.WriteLine(vysledek); // Výstup bude: 12
Přetěžování metod (Overloading)
V C# můžeme definovat více metod se stejným názvem, pokud mají odlišné parametry. Tento koncept se nazývá přetěžování metod (method overloading). Při volání metody C# automaticky zvolí správnou verzi metody podle počtu a typů předaných argumentů.
Příklad přetížení metod:
int Vynasob(int a, int b)
{
return a * b;
}
double Vynasob(double a, double b)
{
return a * b;
}
V tomto příkladu máme dvě verze metody Vynasob
– jedna přijímá argumenty typu int
a druhá argumenty typu double
. Kompilátor C# automaticky vybere správnou verzi podle toho, jaký typ argumentů předáme při volání metody.
int vysledek1 = Vynasob(2, 3); // Použije verzi s int parametry
double vysledek2 = Vynasob(2.5, 3.0); // Použije verzi s double parametry
Rekurze
Rekurze je technika, kdy metoda volá sama sebe. Používá se často k řešení problémů, které mohou být rozloženy na menší, podobné podproblémy, jako je faktoriál nebo výpočet Fibonacciho posloupnosti. Při práci s rekurzí je důležité zajistit, aby existovala ukončovací podmínka, jinak by smyčka pokračovala donekonečna.
Příklad rekurzivní metody:
int Faktorial(int n)
{
if (n == 0)
{
return 1;
}
else
{
return n * Faktorial(n - 1);
}
}
Tato metoda vypočítá faktoriál čísla. Pokud je n
rovno 0, vrátí 1 (což je ukončovací podmínka). Jinak zavolá sama sebe s hodnotou n - 1
, dokud nedosáhne 0.
Příklad volání rekurzivní metody:
int vysledek = Faktorial(5);
Console.WriteLine("Faktoriál čísla 5 je: " + vysledek);
Výstup:
Faktoriál čísla 5 je: 120
Návratové hodnoty a práce s nimi
Návratové hodnoty jsou důležitým prvkem metod. Metoda může vrátit hodnotu zpět do místa, kde byla zavolána, a tuto hodnotu můžeme dále zpracovat, přiřadit ji do proměnné nebo ji použít jako vstup pro další oper