Definícia funkcie
Funkcie definujeme ako blok skladajúci sa s postupností príkazov. Funkcia sa môže inicializovať s nejakými vstupmi a môže vracať navratovú hodnotu. To závisi, ako ju naprogramujete. Syntax funkcie je nasledovná:
type name(parameter1,parameter2,parameter3, …)
{
statements
}
type rozumieme typ návratovej hodnoty, ktorú má funkcia vrátiť. name je meno funkcie a parameter je nejaký vstup, ktorý môže funkcia využiť. statements rozumieme postupností príkazov, ktoré sa vykonajú v danom tele funkcie.
Význam funkcii
Vytvorme si program, kde fiktívna osoba sa opýta na meno a priezvisko a odpoveďou budú tri odpovede.
#include <iostream>
using namespace std;
int main()
{
string retazec = "Ake je tvoje meno a priezvisko uzivatel?\n";
cout << retazec;
cout << "Ja sa volam Jozko Hrasko."<<"\n";
cout << "Ja sa volam Marienka Mlada."<<"\n";
cout << "Ja sa volam Ruzena Krasomilka."<<"\n";
return 0;
}
Výstupom programu je otázka a 3 odpovede:
Ake je tvoje meno a priezvisko uzivatel? Ja sa volam Jozko Hrasko. Ja sa volam Marienka Mlada. Ja sa volam Ruzena Krasomilka.
A teraz si predstavte, že nemáme len 3 odpovede, ale tisíc! Budeme takto riadok po riadku pracne programovať? Ako sa hovorí, sústavná manuálna práca zabíja čas a tvorivosť. Aby sme sa vyhli toľkému programovaniu, využijeme funkciu.
#include <iostream>
using namespace std;
void vypis(string name)
{
cout << "Ja sa volam "<<name<<".\n";
}
int main()
{
string retazec = "Ake je tvoje meno a priezvisko uzivatel?\n";
cout << retazec;
vypis("Jozko Hrasko");
vypis("Marienka Mlada");
vypis("Ruzena Krasomilka");
return 0;
}
Môžete namietať, že sme mohli využiť cyklus for, napr. takto:
#include <iostream>
using namespace std;
int main()
{
string retazec = "Ake je tvoje meno a priezvisko uzivatel?\n";
string poleStringov[3] = {"Jozko Hrasko","Marienka Mlada","Ruzena Krasomilka"};
cout << retazec;
for(int i = 0; i < 3;i++)
{
cout << "Ja sa volam "<<poleStringov[i]<<".\n";
}
return 0;
}
Síce sme ušetrili pár riadkov, no predstavte si, že v hlavnej funkcii main je stovky takýchto cyklov. Dostávame sa ku veľkej zložitostí a malej priehľadností, čo bola aj najväčšia slabina programovacích jazykov pred érou procedurálneho programovania a podpory C syntaxe. Preto funkcie poskytujú lepšiu priehľadnosť a čitateľnosť kódu.
Ešte sa pozrime na zaujímavosť, ktorá v seriáli doteraz nebola.
string poleStringov[3] = {"Jozko Hrasko","Marienka Mlada","Ruzena Krasomilka"};
Vytvorili sme si pole reťazcov o veľkostí 3! Čiže môžeme obsadiť prvky 0, 1 a 2.
Rozdiel medzi argumentom a parametrom
Jedna z najčastejších otázok začiatočníkov je, aký je rozdiel medzi argumentom a parametrom? Nachvíľu si predstavme oceán. Najvyšší bod oceánu je jeho hladina. Najnižší bod oceánu je jeho dno. Máju niečo spoločné hladina a dno? Áno, ten náš oceán. No napriek tomu používame slová hladina a dno nato, aby sme definovali rozdielne výškové body. Rovnakú myšlienkovú argumentáciu môžeme využiť pri argumentoch a parametrov. Parameter píšeme ako vstup pri definovaní našej funkcie. Argument píšeme pri volaní funkcii. A čo spája parameter a argument? No predsa tá funkcia! Toto rozdelenie sa zaviedlo, aby sa spoľahlivo rozlišovali jednotlivé úkony napr. v dokumentácii alebo v tímovej komunikácii.
Vytvorme si program, ktorý vypíše interval od 1 po num, kde num zapíšeme aj ako argument a parameter.
#include <iostream>
using namespace std;
void vypisInterval(int num)
{
for(int i = 1; i <= num; i++)
{
cout<<i<<" ";
}
cout <<"\n";
}
int main()
{
string retazec = "Zadaj cislo, po ktorom sa ma skoncit vypis!";
cout <<retazec<<"\n";
int num;
cin >> num;
vypisInterval(num);
return 0;
}
Argument num sme definovali takto:
vypisInterval(num);
A parameter num:
void vypisInterval(int num)







