Metody
7. Předání parametru
7.3. Výstupní parametry
Pokud předáváme parametr odkazem, kompilátor zkontroluje, zda byla skutečnému parametru přiřazena hodnota. Pokud tomu tak není, zdrojový kód není zkompilován. Co když ale potřebujeme v nějaké metodě inicializovat parametr. Pro tento případ jazyk C# nabízí možnost použít tzv. výstupní parametr pomocí klíčového slova out (zkratka anglického „Output“), které umístíme před skutečný parametr u volání metody, tak i před datový typ u formálního parametru v deklarované metodě (syntaxe je tedy podobná klíčovému slovu ref). Jde tedy o využití reference, tj. propojení skutečného a formálního parametru pomocí reference (odkaz na stejné místo v paměti). V těle volané metody musí před jejím ukončením proběhnout inicializace formálního parametru (pokud tomu tak není, neproběhne kompilace kódu)! Výstupní parametr lze využít i u metody s návratem, ale je spíše využit u metody bez návratu (procedury):
void identifikátorMetody(out datovýTyp formálníParametr)
{
//Tělo metody - musí proběhnout inicializace výstupního parametru
}
kde:
- out - klíčové slovo - slouží pro vytvoření odkazu na skutečné místo uložení hodnoty parametru v paměti (vytvoření odkazu aliasu - na skutečný parametr, tzn. že každá operace provedená s parametrem je provedena na argumentu - skutečném parametru)
- datovýTyp - datový typ výstupního formálního parametru metody
- formálníParametr - identifikátor výstupního formálního parametru metody. Tento datový typ musí být vždy určen. Pokud do metody vstupuje více parametrů, každý parametr má svůj datový typ uváděný před identifikátorem (názvem) parametru spolu s klíčovým slovem out. Tyto parametry, jsou od sebe odděleny čárkami
- Tělo metody - v těle metody musí proběhnout inicializace (přiřazení hodnoty) výstupního formálního parametru
-
návratovýDatovýTyp, identifikátorMetody, return, výstup - popsáno v předchozích kapitolách
Syntaxe volání metody bez návratu (procedury) u výstupního parametru vypadá syntaxe následovně:
identifikátorMetody(out skutečnýParametr);
kde
- out - klíčové slovo - slouží pro vytvoření odkazu na skutečné místo uložení hodnoty parametru v paměti
-
identifikátorMetody, skutečnýParametr- popsáno v předchozích kapitolách
Ilustrativní příklad InicializaceVystupnihoParametru
Program InicializaceVystupnihoParametru
-
Popis: Příklad deklarace metody s celočíselným parametrem – výstupní parametr
-
Zadání: Zkuste deklarovat metodu bez návratu nazvanou InicializaceVystupnihoParametru, která inicializuje výstupní celočíselný parametr pojmenovaný formalniParametr hodnotou 7. Hodnotu parametru vypište jak v deklarované metodě, tak i v metodě Main, ze které je metoda volána
-
Řešení: Bude postupně probráno v následujícím textu
Následující příklad ilustruje princip použití výstupního parametru – viz Kód 1. Deklarovali jsme statickou metodu bez návratu (proceduru) InicializaceVystupnihoParametru, která bude zavolána ze statické metody Main. Metoda InicializaceVystupnihoParametru ve svém těle metody formálnímu parametru počáteční hodnotu 7. V metodě necháme vypsat aktuálního hodnotu formálního parametru. Je důležité zmínit fakt, že se jedná o propojení skutečného a formálního parametru pomocí reference (odkazu). Pokud tedy něco provádíme s formálním parametrem, tyto změny jsou promítány i do skutečného parametru.
/*Deklarace statické metody s jedním celočíselným formálním parametrem - použití výstupního parametru*/ static void InicializaceVystupnihoParametru(out int formalniParametr) { //Inicializace parametru formalniParametr = 7; //Výpis aktuálního hodnoty argumentu Console.WriteLine("Formální parametr: {0}", formalniParametr); }
Kód 1: Příklad deklarace metody InicializaceVystupnihoParametru s celočíselným parametrem – výstupní parametr
V metodě Main zavoláme vytvořenou metodu InicializaceVystupnihoParametru, která nám do skutečného parametru přiřadí inicializovanou hodnotu uloženou ve formálním parametru - viz Kód 2. V metodě Main necháme vypsat aktuální hodnotu skutečného parametru. Vzhledem k tomu, že jsme v metodě kromě inicializace neprováděli žádné další operace s formálním parametrem, hodnota skutečného parametru a formálního parametru je stejná.
static void Main(string[] args) { //Deklarace skutečného parametru, tj. argument volané metody int skutecnyParametr; //Zavolání statické metody bez návratu ve které proběhne inicializace parametru InicializaceVystupnihoParametru(out skutecnyParametr); //Výpis aktuálního hodnoty skutečného parametru Console.WriteLine("Skutečný parametr: {0}", skutecnyParametr); //Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); }
Kód 2: Příklad zavolání metody InicializaceVystupnihoParametru s výstupním parametrem
Na základě výpisu v konzole vidíme, že pokud vypsaná hodnota výstupního parametru v deklarované metodě je stejná jako hodnotou skutečného parametru v metodě Main, protože jsme neprováděli žádnou aritmetickou operaci - viz Výstup programu - Kód 2.
Formální parametr: 7 Skutečný parametr: 7
Výstup programu - Kód 2: Ukázka výsledku předání parametru hodnotou