Exercício – Entender o escopo do método
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.
No Editor do Visual Studio Code, exclua qualquer código existente dos exercícios anteriores.
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
studentse um métodoDisplayStudentsque aceita um parâmetro com o mesmo nome.Salve e execute o código para observar a seguinte saída:
Jenna, Ayesha, Carlos, Viktor, Robert, Vanya,Observe que o parâmetro
studentde método tem precedência sobre a matriz globalstudent. É importante ser deliberado sobre quais variáveis globais você deseja que seus métodos usem.Exclua o código anterior.
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.
Tente fazer referência às variáveis dentro do
PrintCircleAreamétodo atualizando seu código da seguinte maneira:PrintCircleArea(12); double circumference = 2 * pi * radius;As mensagens de erro aparecem informando que os nomes
pieradiusnão existem no escopo atual. Essas variáveis só existem dentro do escopo doPrintCircleAreamétodo.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,radiusnão é uma variável global, permitindo que você chame os métodos com valores diferentes deradiussem precisar atualizar uma variável a cada vez.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
pisem 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.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
PrintCircleInfopara chamar os métodos existentes. O valor deradiustambé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.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.