Ćwiczenie — omówienie zakresu metody

Zakończone

for pętle, if-else instrukcje i metody reprezentują różne typy bloków kodu. Każdy blok kodu ma własny "zakres". "Zakres" to region programu, w którym są dostępne pewne dane. Zmienne zadeklarowane wewnątrz metody lub dowolnego bloku kodu są dostępne tylko w tym regionie. W miarę jak programy stają się bardziej skomplikowane, ten wzorzec pomaga programistom konsekwentnie używać jasno nazwanych zmiennych i utrzymywać łatwy do odczytania kod.

W tym ćwiczeniu dowiesz się więcej o zakresie metody, pracując z różnymi typami metod i zmiennych.

Zakres zmiennej testowej

Instrukcje zadeklarowane poza dowolnym blokiem kodu są nazywane instrukcjami najwyższego poziomu. Zmienne zadeklarowane w instrukcjach najwyższego poziomu są nazywane "zmiennymi globalnymi". Zmienne globalne nie są ograniczone do żadnego zakresu i mogą być używane w dowolnym miejscu w całym programie. Zmienne globalne mogą być przydatne w przypadku różnych metod, które muszą uzyskiwać dostęp do tych samych danych. Ważne jest jednak, aby zwrócić uwagę na nazwy zmiennych w różnych zakresach.

  1. W edytorze programu Visual Studio Code usuń dowolny istniejący kod z poprzednich ćwiczeń.

  2. Wprowadź następujący kod w edytorze programu Visual Studio Code:

    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();
    }
    

    W tym kodzie utworzysz tablicę globalną students i metodę DisplayStudents , która akceptuje parametr o tej samej nazwie.

  3. Zapisz i uruchom kod, aby obserwować następujące dane wyjściowe:

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

    Zwróć uwagę, że parametr student metody ma pierwszeństwo przed tablicą globalną student . Ważne jest, aby celowe było określenie, jakie zmienne globalne mają być używane przez metody.

  4. Usuń poprzedni kod.

  5. Wprowadź następujący kod w edytorze:

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

    Ten kod oblicza i wyświetla obszar okręgu.

  6. Spróbuj odwołać się do zmiennych wewnątrz PrintCircleArea metody, aktualizując kod w następujący sposób:

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

    Wyświetlane komunikaty o błędach informują o tym, że nazwy pi i radius nie istnieją w bieżącym zakresie. Te zmienne istnieją tylko w PrintCircleArea zakresie metody.

  7. Usuń nieprawidłowy kod i dodaj następujący kod:

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

    Ponieważ zmienna pi jest ustawiona na tę samą stałą wartość i jest używana w obu metodach, ta wartość jest dobrym kandydatem dla zmiennej globalnej. W tym przykładzie nie jest zmienną globalną, radius dzięki czemu można wywołać metody z różnymi wartościami radius bez aktualizowania zmiennej za każdym razem.

  8. Zaktualizuj swój kod do następującej wersji.

    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}");
    }
    

    Teraz obie metody mogą odwoływać się do tej samej wartości pi bez konieczności jej definiowania. Być może już odgadłeś, że metody mogą wywoływać inne metody. Ogólnie rzecz biorąc, o ile metoda jest zdefiniowana w zakresie programu, może być wywoływana w dowolnym miejscu.

  9. Dodaj nową metodę do kodu w następujący sposób:

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

    W tym kodzie utworzysz nową metodę PrintCircleInfo w celu wywołania istniejących metod. Wartość parametru radius jest również przekazywana do każdej metody. Tworzenie metod modularyzowanych może pomóc w sposobie organizowania i łatwego odczytywania kodu.

  10. Zapisz i uruchom kod, aby obserwować następujące dane wyjściowe:

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

Podsumowanie

Oto, czego nauczyłeś się o zakresie metod do tej pory:

  • Zmienne zadeklarowane wewnątrz metody są dostępne tylko dla tej metody.
  • Zmienne zadeklarowane w instrukcjach najwyższego poziomu są dostępne w całym programie.
  • Metody nie mają dostępu do zmiennych zdefiniowanych w różnych metodach.
  • Metody mogą wywoływać inne metody.