Skip to content

Latest commit

 

History

History

01-definice-a-volani

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Definice a volání

Funkce se dá popsat tak, že to je část kódu, která je nějak pojmenována a lze ji pod tímto jménem využít opakovaně. Vytvoření funkce se v C#, Javě, C++ a C provádí slovem void. V JavaScriptu je to function, v Pythonu def. Po něm následuje její název a hned za ním kulaté závorky. Po nich přijdou složené závorky ohraničující tělo metody, podobně jako u podmínek. Do nich patří kód, který se má ve funkci vykonat. Příklad definice funkce:

void Greet()
{
    Console.WriteLine("Hello, world!");
}

Vytváříme funkci nazvanou Greet, tedy pozdravit. Zvykem je pojmenovávat funkci nejlépe slovesem, a případně dalšími přidanými slovy, které vystihují její účel. V těle této funkce je kód, který na výstup vypíše klasický známý pozdrav.

Tento program by po spuštění ale nevypsal nic. Tím, že jsme funkci v kódu vytvořili, se její obsah ještě neprovede. K tomu je potřeba funkci použít, takzvaně zavolat. Tam, kde chceme vykonat kód, který je uvnitř funkce, jednoduše napíšeme její název a za něj opět kulaté závorky. A nakonec středník, jako na konci každého příkazu. Volat funkci lze v kódu i nad místem, kde je definována. Tedy například:

Greet();

void Greet()
{
    Console.WriteLine("Hello, world!");
}

Na prvním řádku je zavolána funkce Greet. Když se program na tento řádek dostane, přejde k vykonávání kódu, který je v jejím těle a vypíše tedy pozdrav. Jakmile dojde na konec funkce, vrátí se ve vykonávání zpět na řádek, kde byla volána a pokračuje dál. Mějme takovýto program:

Console.WriteLine("start");
Greet();
Console.WriteLine("middle");
Greet();
Greet();
Console.WriteLine("end");

void Greet()
{
    Console.WriteLine("Hello, world!");
}

Nejdříve vypisuje start, poté volá Greet. Když se funkce dokončí, pokračuje dál a vypíše middle. Poté volá funkci dvakrát za sebou. Nejdříve se provede první volání, to skončí, a provede se druhé. Nakonec se ještě vypíše end. Výstupem je tedy

start
Hello, world!
middle
Hello, world!
Hello, world!
end

Vytváří-li funkce ve svém těle nějaké proměnné, po jejím skončení jsou odstraněny. Následující kód je tudíž chybný a nespustí se.

CreateNumber();

// Chyba - proměnná `number` neexistuje.
Console.WriteLine(number);

void CreateNumber()
{
    int number = 5;
}

Podobně tomu je když se ve funkci vytvoří proměnná se stejným názvem, jako nějaká již existující v kódu, který ji zavolal. Tyto proměnné spolu nemají nic společného – každá má svou oddělenou hodnotu. Příklad:

int number = 10;

PrintNumber();

Console.WriteLine(number);

void PrintNumber()
{
    int number = 5;
    Console.WriteLine(number);
}

Výstupem bude

5
10

Nejdříve se vytvoří proměnná number s hodnotou 10. Funkce si ve svém těle vytvoří jinou proměnnou se stejným názvem a hodnotou 5. Ta nijak neovlivní tu původní. Tuto novou proměnnou vypíše a skončí – tím je proměnná zahozena a pokračuje se dál. Program pak vypíše svou původní hodnotu v number.