Cvičení – návratové hodnoty a parametry metod
- 18 min
V předchozí lekci jste použili scénář kódování "roll dice" k ilustraci rozdílu mezi stavovými (instancemi) a bezstavovými (statickými) metodami. Stejný scénář vám může pomoct pochopit další důležité koncepty volání metod. Například:
- zpracování návratové hodnoty metody.
- parametry metody a předávání argumentů metodě.
- volba přetížené verze metody.
Návratové hodnoty
Některé metody jsou navržené tak, že provedou svoji funkci a „tiše“ se ukončí. Jinými slovy, po dokončení nevrací hodnotu. Označují se jako metody void.
Jiné metody jsou navržené tak, aby po dokončení vracely hodnotu. Vrácená hodnota je obvykle výsledkem operace. Návratová hodnota je primární způsob, jak metoda komunikovat zpět s kódem, který metodu volá.
Viděli jste, že Random.Next() metoda vrací int typ obsahující hodnotu náhodně generovaného čísla. Metoda však může být navržena tak, aby vracela libovolný datový typ, dokonce i jinou třídu. Třída má například String některé metody, které vracejí řetězec, některé vracejí celé číslo a některé vracejí logickou hodnotu.
Při volání metody, která vrací hodnotu, často přiřadíte návratovou hodnotu proměnné. Tímto způsobem můžete hodnotu použít později v kódu. Ve scénáři kostky jste přiřadili návratové Random.Next() hodnoty proměnné roll :
int roll = dice.Next(1, 7);
V některých případech můžete chtít návratovou hodnotu použít přímo, aniž byste ji přiřadili proměnné. Můžete například chtít vytisknout návratovou hodnotu do konzoly následujícím způsobem:
Console.WriteLine(dice.Next(1, 7));
I když metoda vrací hodnotu, je možné metodu volat bez použití návratové hodnoty. Vrácenou hodnotu můžete například ignorovat voláním metody následujícím způsobem:
dice.Next(1, 7);
Ignorování návratové hodnoty by však bylo bezcenné. Důvodem volání Next() metody je, abyste mohli načíst další náhodnou hodnotu.
Parametry metody a argumenty ve volajícím příkazu
Při volání metody můžete předat hodnoty, které metoda použije k dokončení úkolu. Tyto hodnoty se nazývají argumenty. Metoda používá argumenty k přiřazení hodnot k parametrům definovaným v podpisu metody. Metoda může k provedení úkolu vyžadovat jeden nebo více parametrů, nebo vůbec žádný.
Poznámka:
Termíny parametr a argument se často používají zaměnitelně. Parametr ale odkazuje na proměnnou, která se používá uvnitř metody. Argument je hodnota, která se předává při zavolání metody.
Většina metod je navržená tak, aby přijímala jeden nebo více parametrů. Parametry lze použít ke konfiguraci toho, jak metoda funguje, nebo mohou být provozovány přímo.
Random.Next() Například metoda používá parametry ke konfiguraci horní a dolní hranice návratové hodnoty. Parametr se ale použije přímo tak, Console.WriteLine() že hodnotu vytiskne do konzoly.
Metody používají podpis metody k definování počtu parametrů, které metoda přijme, a také datový typ každého parametru. Kódovací příkaz, který volá metodu, musí splňovat požadavky určené podpisem metody. Některé metody poskytují možnosti pro počet a typ parametrů, které metoda přijímá.
Když volající vyvolá metodu, poskytuje konkrétní hodnoty označované jako argumenty pro každý parametr. Argumenty musí být kompatibilní s typem parametru. Název argumentu, pokud je použit ve volajícím kódu, nemusí být stejný jako název parametru definovaný v metodě.
Vezměte v úvahu následující kód:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
První řádek kódu vytvoří instanci Random třídy s názvem dice. Druhý řádek kódu používá metodu dice.Next(1, 7) k přiřazení náhodné hodnoty k celé číslo s názvem roll. Všimněte si, že volající příkaz obsahuje dva argumenty oddělené , symbolem. Metoda Next() obsahuje podpis metody, který přijímá dva parametry typu int. Tyto parametry slouží ke konfiguraci dolních a horních hranic pro vrácené náhodné číslo. Poslední řádek kódu používá metodu Console.WriteLine() k vytištění hodnoty roll do konzoly.
Argumenty předané metodě musí být stejný datový typ jako odpovídající parametry definované metodou. Pokud se pokusíte předat nesprávně zadaný argument metodě, kompilátor jazyka C# zachytí vaši chybu a vynutí aktualizaci volajícího příkazu před kompilací a spuštěním kódu. Kontrola typů je jedním ze způsobů, jak používat C# a .NET, aby koncoví uživatelé nemohli za běhu nacházet chyby.
Poznámka:
I když se parametry často používají, ne všechny metody k dokončení úlohy vyžadují parametry. Třída například Console obsahuje metodu Console.Clear() , která nepoužívá parametry. Vzhledem k tomu, že tato metoda slouží k vymazání všech informací zobrazených v konzole, nepotřebuje parametry k dokončení úlohy.
Přetížené metody
Mnohé metody v knihovně tříd .NET mají signatury přetížené metody. Mimo jiné to umožňuje volat metodu s argumenty zadanými v příkazu volání nebo bez nich.
Přetížená metoda je definovaná s několika signaturami metody. Přetížené metody poskytují různé způsoby volání metody nebo poskytují různé typy dat.
V některých případech se přetížené verze metody používají k definování parametru pomocí různých datových typů. Například metoda Console.WriteLine() má 19 odlišných přetížených verzí. Většina těchto přetížení umožňuje metodě přijímat různé typy a pak zapisovat zadané informace do konzoly. Vezměte v úvahu následující kód:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
V tomto příkladu se vyvolávají tři samostatné přetížené verze metody WriteLine().
- První
WriteLine()metoda používá podpis metody, který definujeintparametr. - Druhá
WriteLine()metoda používá podpis metody, který definuje nulové parametry. - Třetí
WriteLine()metoda používá podpis metody, který definujestringparametr.
V jiných případech přetížené verze metody definují jiný počet parametrů. Alternativní parametry lze použít k zajištění větší kontroly nad požadovaným výsledkem. Například Random.Next() metoda má přetížené verze, které umožňují nastavit různé úrovně omezení na náhodně generované číslo.
Následující cvičení volá metodu Random.Next() , která generuje náhodné celočíselné hodnoty s různými úrovněmi omezení:
Ujistěte se, že máte v editoru Visual Studio Code otevřený prázdný soubor Program.cs.
V případě potřeby otevřete Visual Studio Code a pak následujícím postupem připravte soubor Program.cs v Editoru:
V nabídce Soubor vyberte Otevřít složku.
Pomocí dialogového okna Otevřít složku přejděte na složku CsharpProjects a otevřete ji.
V zobrazení Průzkumníka editoru Visual Studio Code vyberte Program.cs.
V nabídce Výběru editoru Visual Studio Code vyberte Vybrat vše a stiskněte klávesu Delete.
Pokud chcete prozkoumat přetížené verze
Random.Next()metody, zadejte následující kód:Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.
Chcete-li v zobrazení PRŮZKUMNÍKa otevřít terminál v umístění složky TestProject, klepněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.
Ujistěte se, že cesta ke složce zobrazená na příkazovém řádku odkazuje na složku obsahující váš soubor Program.cs.
Na příkazovém řádku terminálu pro spuštění vašeho kódu zadejte dotnet run a stiskněte Enter.
Všimněte si, že výsledek je podobný následujícímu výstupu:
First roll: 342585470 Second roll: 43 Third roll: 89Vygenerovaná čísla jsou náhodná, takže se výsledky budou lišit. Tento příklad ale ukazuje rozsah výsledků, které můžete vidět.
Prohlédněte si kód za minutu.
První verze metody
Next()nenastavuje horní a dolní hranici, takže metoda vrací hodnoty od0do2,147,483,647, což je maximální hodnota, kterou datový typintdokáže uložit.Druhá verze
Next()metody určuje maximální hodnotu jako horní hranice, takže v tomto případě můžete očekávat náhodnou hodnotu mezi0a100.Třetí verze
Next()metody určuje minimální i maximální hodnoty, takže v tomto případě můžete očekávat náhodnou hodnotu mezi50a100.Zavřete panel Terminálu.
V této lekci jste už prozkoumali několik témat. Tady je rychlý seznam toho, co jste probrali:
- Prozkoumali jste, jak použít návratovou hodnotu metody (když metoda poskytuje návratovou hodnotu).
- Prozkoumali jste, jak metoda může používat parametry definované jako konkrétní datové typy.
- Prozkoumali jste přetížené verze některých metod, které obsahují různé parametry nebo typy parametrů.
Použití Technologie IntelliSense
Visual Studio Code obsahuje funkce IntelliSense , které využívají službu jazyka. Například služba jazyka C# poskytuje inteligentní dokončování kódu na základě sémantiky jazyka a analýzy zdrojového kódu. V této části použijete IntelliSense k implementaci Random.Next() metody.
Vzhledem k tomu, že intelliSense je vystavený v editoru kódu, můžete se o metodě dozvědět hodně, aniž byste opustili programovací prostředí. IntelliSense poskytuje rady a referenční informace v místním okně pod umístěním kurzoru při zadávání kódu. Při psaní kódu se automaticky otevírané okno IntelliSense změní jeho obsah v závislosti na kontextu.
Když třeba slovo dice zadáte pomalu, IntelliSense zobrazí všechna klíčová slova, identifikátory (nebo spíše názvy proměnných v kódu) a třídy v knihovně tříd .NET, které odpovídají zadaným písmenům. Funkce automatického dokončování editoru kódu lze použít k dokončení zadávání slova, které je nejvyšší shoda v místní nabídce IntelliSense. Vyzkoušejte si to.
Ujistěte se, že máte soubor Program.cs otevřený v editoru Visual Studio Code.
Aplikace by měla obsahovat následující kód:
Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");V dolní části souboru kódu experimentujte s IntelliSense, pomalu zadejte písmena
daipakc.Všimněte si automaticky otevírané okno IntelliSense, které se zobrazí, když začnete psát.
Když se zobrazí intelliSense, měl by se zobrazit seznam návrhů. Po zadání
dicby měl být identifikátordicev horní části seznamu.Stiskněte klávesu Tab na klávesnici.
Všimněte si, že celé slovo
diceje dokončeno v editoru. Pomocí kláves se šipkou nahoru a dolů můžete výběr před stisknutím klávesy Tab změnit.Poznámka:
Pokud okno IntelliSense zmizí, můžete ho
backspacevybrat pomocí klávesy na klávesnici a pak znovu zadat poslední symbol a znovu otevřít IntelliSense.Pokud chcete zadat přístupový operátor člena, zadejte
.znak.Všimněte si, že se při zadání
.znovu zobrazí automaticky otevírané okno IntelliSense a zobrazí seznam nefiltrovaných metod (a dalších členů třídy), které jsou k dispozici.Enter N
Seznam se vyfiltruje a slovo
Nextby mělo být horním výběrem.Pokud chcete automatické dokončování celého slova, stiskněte klávesu Tab.
Chcete-li zadat operátor volání metody, zadejte (
Všimněte si, že pravá závorka se automaticky přidá za vás.
Operátor volání metody je sada závorek umístěných vpravo od názvu metody. Tato část volajícího příkazu je místo, kde zadáte argumenty, které budou předány metodě. Operátor volání metody je vyžadován při volání metody.
Všimněte si, že místní nabídka IntelliSense teď zobrazuje podrobné informace o
Random.Next()metodě.Projděte si místní okno IntelliSense pro metodu
Random.Next().Poznámka:
Pokud se automaticky otevírané okno IntelliSense zavřelo dříve, než jste ho mohli prozkoumat, odstraňte operátor
()vyvolání a pak zadejte ( zobrazte automaticky otevírané okno IntelliSense.Všimněte si, že automaticky otevírané okno obsahuje tři oddíly, jeden vlevo a dva vpravo.
Na pravé straně byste měli vidět
int Random.Next()v horní části aReturns a non-negative random integer.v dolní části. Definujeintnávratový typ pro metodu. Jinými slovy, když se tato verze metody spustí, vrátí hodnotu typuint.Na levé straně místní nabídky IntelliSense se zobrazí
1/3.Označuje
1/3, že se díváte na první ze tří podpisů metody pro metoduNext(). Všimněte si, že tato verze podpisu metody umožňuje metodě pracovat bez parametrů (žádné argumenty předané metodě v příkazu volání).Všimněte si, že pod a pod ní je také malá šipka
1/3.Pokud chcete prozkoumat druhou přetíženou verzi metody, stiskněte klávesu Šipka dolů na klávesnici.
Všimněte si, že k navigaci mezi různými přetíženými verzemi můžete použít klávesy se šipkami nahoru a dolů. Když to uděláte, uvidíte ikonu
1/3,2/3a3/3zobrazí se na levé straně místní nabídky IntelliSense a užitečné vysvětlení na pravé straně.Prozkoumejte jednotlivé přetížené verze metody za minutu
Random.Next().Druhá přetížená verze metody, informuje vás,
2/3žeNext()metoda může přijmout parametrint maxValue. Popis vám řekne, žemaxValueje výhradní horní mez čísla, které máNext()metoda vygenerovat. Exkluzivní označuje, že návratové číslo bude menší než maxValue. Pokud tedy zadátedice.Next(1,7);maximální hod kostky, bude 6. Všimněte si, že zpráva v dolní části oddílu byla aktualizována na:Returns a non-negative random integer that is less than the specified maximum.Třetí verze metody, , informuje vás,
3/3žeNext()metoda může přijmout jakint minValueaint maxValuejako parametry. Nový parametr ,minValueje dolní mez pro číslo, které chcete vygenerovat metoduNext(). Vzhledem k tomu, že dolní mez je inkluzivní místo výhradní, návratová hodnota může být rovnaminValue. Zpráva v dolní části teď uvádí:Returns a random integer that is within a specified range.V tomto případě IntelliSense poskytuje všechny informace, které potřebujete vybrat příslušné přetížení, včetně podrobného vysvětlení
maxValueaminValue. Můžete ale narazit na situace, kdy potřebujete prohlédnout dokumentaci k metodě.
Použití learn.microsoft.com pro informace o přetížených metodách
Druhým způsobem, jak se dozvědět o přetížených verzích metod, je nahlédnout do dokumentace příslušné metody. Dokumentace vám také pomůže pochopit přesně to, k čemu je každý parametr určený.
Začněte tím, že otevřete preferovaný webový prohlížeč a vyhledávací web.
Provedení hledání pro jazyk C# Random.Next()
Hledání by mělo obsahovat název třídy a název metody. Můžete také zahrnout termín
C#, abyste nechtěně získali výsledky pro jiné programovací jazyky.Vyberte horní výsledek hledání s adresou URL, která začíná
https://learn.microsoft.comna .Jeden z nejlepších výsledků hledání by měl vést k adrese URL, která začíná
https://learn.microsoft.comna . V tomto případě by se název odkazu měl zobrazit jakoRandom.Next Method.Zde je odkaz pro případ, že máte s jeho nalezením pomocí vyhledávacího webu problémy:
Otevřete odkaz pro jazyk C# Random.Next().
Rychle si projděte dokumentaci.
Projděte si obsah stránky dolů a prohlédněte si různé ukázky kódu. Všimněte si, že ukázky můžete spustit v okně prohlížeče.
Dokumentace learn.microsoft.com se řídí standardním formátem pro každou třídu a metodu v knihovně tříd .NET.
V horní části webové stránky vyhledejte oddíl s názvem Přetížení.
Všimněte si, že jsou uvedené tři přetížené verze metody. Každá přetížená verze, která je uvedená, obsahuje hypertextový odkaz na umístění na stránce dále dolů.
Pokud chcete přejít na stránku na popis druhé přetížené verze, vyberte Next(Int32).
Dokumentace pro každou verzi metody zahrnuje:
- Stručný popis funkčnosti metody
- Definice metody
- Parametry, které metoda přijímá
- Návratové hodnoty
- Výjimky, které lze vyvolit
- Příklady používané metody
- Další poznámky k metodě
Projděte si část Parametry .
V části Parametry si můžete přečíst, že
maxValueparametr je "výhradní horní mez náhodného čísla, které se má vygenerovat". Výhradní horní mez znamená, že pokud chcete, aby čísla nebyla větší než10, musíte předat hodnotu11.Můžete si také přečíst na dalším řádku: "
maxValuemusí být větší než nebo rovno 0." Co se stane, když tento příkaz ignorujete? V části Výjimky můžete vidět, že metoda vrátíArgumentOutOfRangeExceptionhodnotu, kdymaxValueje menší než 0.Poznámka:
Obsah v learn.microsoft.com je "zdrojem pravdy" pro knihovnu tříd .NET. Je důležité si přečíst dokumentaci, abyste pochopili, jak daná metoda bude fungovat.
Rekapitulace
- Metody nemusí přijímat žádné parametry nebo více parametrů v závislosti na tom, jak byly navrženy a implementovány. Při předávání více parametrů je
,oddělte symbolem. - Metody můžou vrátit hodnotu po dokončení úkolu nebo nemusí vrátit nic (void).
- Přetížené metody podporují několik implementací metody, z nichž každá má jedinečný podpis metody (počet parametrů a datový typ každého parametru).
- IntelliSense vám může pomoct rychleji psát kód. Poskytuje rychlý odkaz na metody, jejich návratové hodnoty, jejich přetížené verze a typy jejich parametrů.
- learn.microsoft.com je "zdrojem pravdy", pokud chcete zjistit, jak metody v knihovně tříd .NET fungují.