Podprogram: Porovnání verzí
Smazaný obsah Přidaný obsah
m odebrána Kategorie:Programování; přidána Kategorie:Programovací konstrukce za použití HotCat |
Opravy textu |
||
Řádek 1:
'''
Některé jazyky ([[Pascal (programovací jazyk)|Pascal]], [[Fortran]], [[Ada (programovací jazyk)|Ada]])
Výsledek podprogramu na rozdíl od [[funkce (matematika)|funkce]] v [[matematika|matematice]] nemusí záviset jen na jeho parametrech – podprogram při svém v provádění může pracovat i s jinými daty a provádět [[vstup/výstup|vstupní nebo výstupní operace]], takže návratová hodnota zdaleka nemusí být jeho jediným výsledkem (viz [[vedlejší účinek]]).
▲Některé jazyky ([[Pascal (programovací jazyk)|Pascal]], [[Fortran]], [[Ada (programovací jazyk)|Ada]]) odlišují funkce a funkcionální podprogramy (vracejí hodnoty) od podprogramů a procedur (nevracejí hodnoty). Jiné jazyky ([[C (programovací jazyk)|C]], [[Lisp]]) nerozlišují tyto termíny a pokládají je za synonyma. V [[Objektově orientované programování|objektově orientovaném programování]] se funkce náležející určité třídě nazývají '''metodami'''.
== Motivace ==
* rozklad složitých problémů na jednodušší
* odstranění
* umožňuje znovupoužití v jiných programech
* rozvržení projektu mezi více programátorů nebo mezi více oddělení projektu
*
==
Podle toho, jestli se parametry vyskytují v definici nebo volání podprogramu, rozlišujeme:
* '''formální argumenty''' (parametry) - udává jakého [[datový typ|datového typu]] a počtu jsou jednotlivé argumenty funkce, některé programovací jazyky umožňují deklarovat funkce s proměnným počtem parametrů▼
* '''formální parametry''' - jsou parametry použité v definici podprogramu; umožňují specifikovat, jakého [[datový typ|datového typu]] jsou jednotlivé parametry podprogramu, a jaké operace se s nimi uvnitř podprogramu provádějí
▲* '''
Podle vztahu formálního a skutečného parametru rozlišujeme různé metody předávání (neboli volání) parametrů:
▲=== Předávání argumentů ===
;'''volání hodnotou''' ('''call by value''')
:volající provede vyhodnocení výrazu
;'''volání odkazem''' ('''call by reference''')
:volající předá v argumentu funkce [[Ukazatel (informatika)|ukazatel]] nebo [[reference|referenci]] na [[proměnná|proměnou]]
;'''volání výsledkem''' ('''call by result''')
:při vstupu do funkce má proměnná odpovídající formálnímu parametru nedefinovanou hodnotu; funkce ji může používat jako lokální proměnnou; při skončení funkce se její hodnota předá skutečnému parametru
;'''volání hodnotou a výsledkem''' ('''call by value and result''')
:formální parametr se chová jako lokální proměnná, které se při vstupu do funkce předá hodnota argumentu funkce a při výstupu se předá hodnota zpátky; chování je velmi podobné jako u volání odkazem; rozdíl se projeví, pokud funkce s proměnnou, která se používá jako skutečný parametr, pracuje i přímo
;'''volání jménem''' ('''call by name''')
:výraz v argumentu funkce se nevyhodnocuje a předá se do funkce tak jak je
Většina programovacích jazyků má jenom část z uvedených metod volání parametrů (nejčastěji volání hodnotou plus jednu z metod volání odkazem, volání hodnotou a výsledkem a volání jménem). V definici funkce se uvádí, jaká metoda volání se má použít pro každý parametr. U některých typů lze vybrat jen některé metody, například [[pole (informatika)|pole]] se obvykle předává odkazem.
== Ukázky v programovacích jazycích [[C (programovací jazyk)|C]] a [[C++]] ==
|