Cvičení – vysvětlení rozsahu metody

Dokončeno

for smyčky, if-else příkazy a metody představují různé typy bloků kódu. Každý blok kódu má svůj vlastní obor. Obor je oblast programu, kde jsou určitá data přístupná. Proměnné deklarované uvnitř metody nebo jakéhokoli bloku kódu jsou přístupné pouze v rámci této oblasti. S tím, jak jsou programy složitější, tento model pomáhá programátorům konzistentně používat jasně pojmenované proměnné a udržovat snadno čitelný kód.

V tomto cvičení se dozvíte více o rozsahu metod tím, že budete pracovat s různými typy metod a proměnných.

Rozsah testovací proměnné

Příkazy deklarované mimo jakýkoli blok kódu se nazývají příkazy nejvyšší úrovně. Proměnné deklarované v příkazech nejvyšší úrovně se nazývají globální proměnné. Globální proměnné nejsou omezeny na žádný obor a lze je používat kdekoli v rámci programu. Globální proměnné můžou být užitečné pro různé metody, které potřebují přístup ke stejným datům. Je ale důležité věnovat pozornost názvům proměnných v různých oborech.

  1. V editoru Visual Studio Code odstraňte veškerý existující kód z předchozích cvičení.

  2. Do editoru visual studio Code zadejte následující kód:

    string[] students = {"Jenna", "Ayesha", "Carlos", "Viktor"};
    
    DisplayStudents(students);
    DisplayStudents(new string[] {"Robert","Vanya"});
    
    void DisplayStudents(string[] students) 
    {
        foreach (string student in students) 
        {
            Console.Write($"{student}, ");
        }
        Console.WriteLine();
    }
    

    V tomto kódu vytvoříte globální students pole a metodu DisplayStudents , která přijímá parametr se stejným názvem.

  3. Uložte a spusťte kód, abyste mohli sledovat následující výstup:

    Jenna, Ayesha, Carlos, Viktor, 
    Robert, Vanya, 
    

    Všimněte si, že parametr student metody má přednost před globálním student polem. Je důležité se zamyslet nad tím, jaké globální proměnné chcete použít.

  4. Odstraňte předchozí kód.

  5. Do editoru zadejte následující kód:

    PrintCircleArea(12);
    
    void PrintCircleArea(int radius)
    {
        double pi = 3.14159;
        double area = pi * (radius * radius);
        Console.WriteLine($"Area = {area}");
    }
    

    Tento kód vypočítá a zobrazí oblast kruhu.

  6. Pokuste se odkazovat na proměnné uvnitř PrintCircleArea metody tak, že aktualizujete svůj kód následujícím způsobem:

    PrintCircleArea(12);
    double circumference = 2 * pi * radius;
    

    Zobrazí se chybové zprávy, které vás informují o tom, že názvy pi a radius neexistují v aktuálním oboru. Tyto proměnné existují pouze v PrintCircleArea rámci oboru metody.

  7. Odstraňte nesprávný kód a přidejte následující kód:

    void PrintCircleCircumference(int radius)
    {
        double pi = 3.14159;
        double circumference = 2 * pi * radius;
        Console.WriteLine($"Circumference = {circumference}");
    }
    

    Vzhledem k tomu, že proměnná pi je nastavená na stejnou pevnou hodnotu a používá se v obou metodách, je tato hodnota vhodným kandidátem pro globální proměnnou. V tomto příkladu není globální proměnná, radius takže můžete volat metody s různými hodnotami radius bez aktualizace proměnné pokaždé.

  8. Aktualizujte kód následujícím kódem:

    double pi = 3.14159;
    
    void PrintCircleArea(int radius)
    {
        double area = pi * (radius * radius);
        Console.WriteLine($"Area = {area}");
    }
    
    void PrintCircleCircumference(int radius)
    {
        double circumference = 2 * pi * radius;
        Console.WriteLine($"Circumference = {circumference}");
    }
    

    Obě metody teď můžou odkazovat na stejnou hodnotu pi , aniž by ji museli definovat. Možná jste už uhodli, že metody můžou volat jiné metody. Obecně platí, že pokud je metoda definována v rámci vašeho programu, lze ji volat kdekoli.

  9. Přidejte do kódu novou metodu následujícím způsobem:

    double pi = 3.14159;
    PrintCircleInfo(12);
    PrintCircleInfo(24);
    
    void PrintCircleInfo(int radius) 
    {
        Console.WriteLine($"Circle with radius {radius}");
        PrintCircleArea(radius);
        PrintCircleCircumference(radius);
    }
    

    V tomto kódu vytvoříte novou metodu PrintCircleInfo pro volání existujících metod. Hodnota radius je také předána do každé metody. Vytváření modularizovaných metod vám pomůže udržet kód uspořádaný a snadno čitelný.

  10. Uložte a spusťte kód, abyste mohli sledovat následující výstup:

    Circle with radius 12
    Area = 452.38896
    Circumference = 75.39815999999999
    Circle with radius 24
    Area = 1809.55584
    Circumference = 150.79631999999998
    

Rekapitulace

Tady je, co jste se zatím dozvěděli o rozsahu metody:

  • Proměnné deklarované uvnitř metody jsou přístupné pouze pro tuto metodu.
  • Proměnné deklarované v příkazech nejvyšší úrovně jsou přístupné v celém programu.
  • Metody nemají přístup k proměnným definovaným v různých metodách.
  • Metody mohou volat jiné metody.