Exercício – Entender o escopo do método

Concluído

Loops for, instruções if-else e métodos representam diferentes tipos de blocos de código. Cada bloco de código tem seu próprio 'escopo'. "Escopo" é a região do programa em que determinados dados são acessíveis. As variáveis declaradas dentro de um método ou qualquer bloco de código só podem ser acessadas nessa região. À medida que os programas se tornam mais complicados, esse padrão ajuda os programadores a usar consistentemente variáveis nomeadas claramente e manter código fácil de ler.

Neste exercício, você aprenderá mais sobre o escopo do método trabalhando com diferentes tipos de métodos e variáveis.

Escopo da variável de teste

Instruções declaradas fora de qualquer bloco de código são chamadas de instruções de nível superior. Variáveis declaradas em instruções de nível superior são chamadas de "variáveis globais". As variáveis globais não são restritas a nenhum escopo e podem ser usadas em qualquer lugar em todo o programa. Variáveis globais podem ser úteis para métodos diferentes que precisam acessar os mesmos dados. No entanto, é importante prestar atenção aos nomes de variáveis em escopos diferentes.

  1. No Editor do Visual Studio Code, exclua qualquer código existente dos exercícios anteriores.

  2. Insira o seguinte código no Editor do 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();
    }
    

    Nesse código, você cria uma matriz global students e um método DisplayStudents que aceita um parâmetro com o mesmo nome.

  3. Salve e execute o código para observar a seguinte saída:

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

    Observe que o parâmetro student de método tem precedência sobre a matriz global student . É importante ser deliberado sobre quais variáveis globais você deseja que seus métodos usem.

  4. Exclua o código anterior.

  5. Digite o seguinte código no Editor:

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

    Esse código calcula e exibe a área de um círculo.

  6. Tente fazer referência às variáveis dentro do PrintCircleArea método atualizando seu código da seguinte maneira:

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

    As mensagens de erro aparecem informando que os nomes pi e radius não existem no escopo atual. Essas variáveis só existem dentro do escopo do PrintCircleArea método.

  7. Exclua o código incorreto e adicione o seguinte código:

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

    Como a variável pi é definida como o mesmo valor fixo e usada em ambos os métodos, esse valor é um bom candidato para uma variável global. Neste exemplo, radius não é uma variável global, permitindo que você chame os métodos com valores diferentes de radius sem precisar atualizar uma variável a cada vez.

  8. Atualize seu código para o seguinte:

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

    Agora, ambos os métodos podem referenciar o mesmo valor pi sem precisar defini-lo. Talvez você já tenha adivinhado que os métodos podem chamar outros métodos. Geralmente, desde que um método seja definido dentro do escopo do seu programa, ele pode ser chamado em qualquer lugar.

  9. Adicione um novo método ao código da seguinte maneira:

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

    Nesse código, você cria um novo método PrintCircleInfo para chamar os métodos existentes. O valor de radius também é passado para cada método. A criação de métodos modularizados pode ajudar a manter seu código organizado e fácil de ler.

  10. Salve e execute o código para observar a seguinte saída:

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

Recapitular

Aqui está o que você aprendeu sobre o escopo do método até agora:

  • As variáveis declaradas dentro de um método só são acessíveis a esse método.
  • As variáveis declaradas em instruções de nível superior são acessíveis em todo o programa.
  • Os métodos não têm acesso a variáveis definidas em métodos diferentes.
  • Os métodos podem chamar outros métodos.