Exercício - Compreender o âmbito do método
for ciclos, if-else declarações e métodos representam diferentes tipos de blocos de código. Cada bloco de código tem o seu próprio «âmbito». "O 'escopo' é a região de um programa onde determinada informação está acessível." As variáveis declaradas dentro de um método, ou qualquer bloco de código, só são acessíveis dentro dessa região. À medida que os programas se tornam mais complicados, esse padrão ajuda os programadores a usar consistentemente variáveis claramente nomeadas e manter um 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
As instruções declaradas fora de qualquer bloco de código são chamadas de instruções de nível superior. As variáveis declaradas em declarações de nível superior são chamadas de 'variáveis globais'. As variáveis globais não estão restritas a nenhum escopo e podem ser usadas em qualquer lugar ao longo do programa. As variáveis globais podem ser úteis para diferentes métodos que precisam acessar os mesmos dados. No entanto, é importante prestar atenção aos nomes de variáveis em diferentes escopos.
No Editor de Códigos do Visual Studio, exclua qualquer código existente dos exercícios anteriores.
Insira o seguinte código no Editor de Códigos do Visual Studio:
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(); }Neste 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 do método
studenttem 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.
Insira 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}"); }Este 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;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, para que possa chamar os métodos com diferentes valores deradiussem precisar atualizar uma variável 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 fazer referência ao mesmo valor de
pisem precisar defini-lo. Você já deve ter intuído que 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 seu 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); }Neste 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 modulares 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
Recapitulação
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 estão acessíveis durante todo o programa.
- Os métodos não têm acesso a variáveis definidas dentro de métodos diferentes.
- Os métodos podem chamar outros métodos.