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)