Funkce (function) nebo někdy označovány jako procedury jsou nedílnou součástí programování. Bez jejich znalosti lze říci, že nelze vytvořit žádný udržitelný velký projekt.

Funkce si lze představit jako malou část kódu, která vykonává přesně definovanou akci.

Lze také říci, že se jedná o algoritmus, jelikož funkce většinou splňuje všechny zásady algoritmu.

<aside> 💡 Před cykly je nutné si zopakovat základní části co známe o jazyku C:

</aside>

Funkce v jazyku C se definují podobně jako ve všech ostatních C-like jazycích.

Syntaxe zápisu function

return_data_type function_name( parameter_list ) {  
	// kód, funkce a procedury, které chcete vykonat
}

Dokonalým příkladem je funkce main(), kterou obsahuje každý program v jazyku C.

#include <stdio.h>

int main() {
	// výpis textu
  printf("Hello World!");
  return 0;
}

Kdy definovat funkce?

<aside> 💡 A co počet řádků ve funkci? tedy délka funkce.

Nelze říct jak by měla být funkce dlouhá, ale čím měně řádků má, tím je většinou přehlednější. Lze toho docílit používáním funkcí a procedur uvnitř dalších funkcí a procedur.

</aside>

Ukázka definice void funkce

Funkce s návratovou hodnotou void se často nazývají procedury!

Základní ukázkou je již zmiňovaná funkce main(), tato funkce je základní funkcí v jazyku C. Definice vlastních funkcí může ovšem mnoho věcí ulehčit. Bez funkci bychom museli vše psát do právě zmíněné funkce main(), což by nebylo vůbec pohodlné skrze více a více řádků a nížkou přehlednost.

#include <stdio.h>

// definuji void - protože funkce nic nevrací
// název funkce by měl odpovídat tomu co se v ní děje
// chci předat pole znaků (name) a věk (age) pro následující použití uvnitř
void printMyData(char name[], int age) {
		// použití vestavěné funkce printf po výpis dat.
    printf("Ahoj, já jsem %s a je mi %d let!\\n", name, age);
}

int main() {
		// volání vlstní funkce uvnitř jiné funkce, aktuálně main
    printMyData("Jakub", 20); // místo proměnných to zapíši napřímo, proč bych vytvářel zbytečné proměnné navíc... když proměnné jen předává data uvnitř sebe
    return 0;
}

Ukázka kódu znázorňuje definici vlastní funkce, která vypisuje data, které do ní vložíme. Konkrétně by měla vypsat data uživatele, tak jak říká název. Říkáte si proč bych to dělal? No zatím to tak nevypadá, ale co když budeme stejné data se stejným textem vypsat třeba na 4 místech v aplikaci? Ukázka kódu níže vypíše vždy to samé, jen s jiným jménem a věkem.