Exercício – blocos de código e âmbito variável
- 11 minutos
Um bloco de código é uma ou mais instruções C# que definem um caminho de execução. As instruções fora de um bloco de código afetam quando, se e com que frequência esse bloco de código é executado em tempo de execução. Os limites de um bloco de código são normalmente definidos por chaves onduladas, {}.
Além de seu efeito no caminho de execução, os blocos de código também podem afetar o escopo de suas variáveis. Os exemplos de código examinados durante este exercício ajudarão você a entender a relação entre blocos de código e escopo variável.
Os blocos de código afetam o âmbito de uma declaração de variável
Escopo variável refere-se à visibilidade de uma variável para o restante do código na sua aplicação. Uma variável com âmbito local está acessível apenas dentro do bloco de código no qual está definida. Se tentar aceder à variável fora do bloco de código, receberá um erro do compilador.
O restante desta unidade explora a relação entre blocos de código e escopo variável.
Prepare seu ambiente de codificação
Este módulo inclui atividades práticas que o guiam através do processo de criação e execução de código de demonstração. Você é incentivado a concluir essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o Visual Studio Code para essas atividades ajudará você a se sentir mais confortável escrevendo e executando código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.
Abra o Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente para outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo de código do Visual Studio, selecione Abrir pasta.
Na caixa de diálogo Abrir pasta , navegue até a pasta Área de trabalho do Windows.
Se você tiver um local de pasta diferente onde você mantém projetos de código, você pode usar esse local de pasta em vez disso. Para este treinamento, o importante é ter um local que seja fácil de localizar e lembrar.
Na caixa de diálogo Abrir pasta , selecione Selecionar pasta.
Se vir uma caixa de diálogo de segurança a perguntar se confia nos autores, selecione Sim.
No menu Terminal de código do Visual Studio, selecione Novo terminal.
Observe que um prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>Nota
Se você estiver trabalhando em seu próprio PC em vez de em uma área restrita ou ambiente hospedado e tiver concluído outros módulos do Microsoft Learn nesta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você pode pular a próxima etapa, que é usada para criar um aplicativo de console na pasta TestProject.
No prompt de comando do Terminal, para criar um novo aplicativo de console em uma pasta especificada, digite o seguinte prompt:
dotnet new console -o ./CsharpProjects/TestProjectEste comando .NET CLI usa um modelo de programa .NET para criar um novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do seu
.csprojarquivo.Se for exibida uma mensagem informando que os arquivos já existem, continue com as próximas etapas. Você reutilizará os arquivos de projeto existentes.
Na visualização EXPLORER, expanda a pasta CsharpProjects .
Você deve ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto C# chamado TestProject.csproj.
No menu Arquivo de código do Visual Studio, selecione Abrir pasta.
Na caixa de diálogo Abrir pasta , selecione a pasta CsharpProjects e, em seguida, selecione Selecionar pasta.
No modo de exibição EXPLORER, expanda a pasta TestProject e selecione Program.cs.
Exclua as linhas de código existentes.
Você usará este projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel Terminal.
Criar uma variável dentro de um bloco de código
Você começará examinando o caso em que uma variável é inicializada dentro de um bloco de código.
Verifique se você tem o Visual Studio Code aberto e Program.cs exibido no painel Editor.
Nota
Program.cs deve estar vazio. Se não estiver, selecione e exclua todas as linhas de código.
Digite o seguinte código no Editor de Códigos do Visual Studio:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }No menu Arquivo do Visual Studio Code, selecione Guardar.
O arquivo Program.cs deve ser salvo antes de criar ou executar o código.
No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.
Um painel Terminal será aberto. O Terminal deve incluir um prompt de comando mostrando que o Terminal está aberto para o local da pasta TestProject.
No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.
Nota
Se você vir uma mensagem dizendo "Não foi possível encontrar um projeto para executar", verifique se o prompt de comando do Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Deverá ver o seguinte resultado:
Inside the code block: 10
Este é o resultado esperado. Mas e se você quiser acessar a variável value fora do if bloco de código da instrução?
Tentar acessar uma variável fora do bloco de código no qual ela é declarada
No Editor de Códigos do Visual Studio, crie uma nova linha de código abaixo do bloco de código da
ifinstrução.Na linha de código em branco que você criou, adicione a seguinte linha de código:
Console.WriteLine($"Outside the code block: {value}");Verifique se o código atualizado tem a seguinte aparência:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Salve seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Entre no
dotnet runprompt de comando do Terminal para executar seu código.Observe que quando você tenta executar o aplicativo, você recebe um erro de compilação:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
A Program.cs(7,46) parte da mensagem informa que o erro está associado à linha 7 no arquivo Program.cs, coluna 46.
Este erro é gerado porque uma variável que é declarada dentro de um bloco de código só é acessível (só pode ser vista) dentro desse bloco de código. Como uma variável não pode ser acessada fora do bloco de código no qual é declarada, value não pode ser acessada a partir da linha 7 do seu código.
Uma variável declarada em um bloco de código de método é chamada de variável local. Você pode ver o termo variável local usado ao revisar artigos que discutem o escopo da variável.
Mova a declaração da variável acima do bloco de código
Para acessar uma variável dentro e fora de um bloco de código, você precisará declarar a variável antes de (acima) o bloco de código para que o código fora do bloco de código possa "ver" a variável.
Atualize seu código no Editor de Códigos do Visual Studio da seguinte maneira:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Reserve um minuto para rever as atualizações.
Observe que
valueagora é declarado (mas não inicializado) fora do bloco deifcódigo.Use o Visual Studio Code para salvar suas atualizações e, em seguida, execute seu código.
Observe que você ainda recebe um erro de compilação.
Desta vez, quando você tenta executar o aplicativo, você obtém o seguinte erro de compilação:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'O erro está associado à linha 6 dentro do bloco de código porque
valuenão foi inicializado (não foi atribuído um valor). Se a linhavalue = 10;de código estivesse localizada acima do bloco de código daifinstrução, o aplicativo seria compilado corretamente e tudo ficaria bem. No entanto, comovaluenão foi inicializado, ele não pode ser acessado dentro do bloco de código.Garantir que suas variáveis sejam inicializadas antes de tentar acessá-las resolverá esse problema.
Inicializar uma variável como parte da declaração de variável
Para inicializar
valuecomo parte da declaração de variável, atualize o código da seguinte maneira:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Este código resolve o erro de compilação "variável local não atribuída" inicializando
valuecomo parte da sua declaração de variável.Use o Visual Studio Code para salvar e executar seu código.
Observe que agora, quando você executa o aplicativo, você vê a seguinte saída:
Inside the code block: 0 Outside the code block: 10
Examine a interpretação do compilador do seu código
Para ajudá-lo a evitar erros de tempo de execução, o compilador C# analisa seu código no Editor de Códigos do Visual Studio e durante o processo de compilação. No entanto, o compilador nem sempre pode interpretar seu código da mesma maneira que você.
Considere os dois exemplos de código a seguir que parecem servir à mesma finalidade:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
Você pode achar que esses dois exemplos devem sempre produzir o mesmo resultado, mas o compilador C# interpreta esses dois exemplos de código de forma diferente.
Para o primeiro exemplo de código, o compilador interpreta flag como uma variável booleana que pode ser atribuída um valor de ou truefalse . O compilador conclui que se flag for false, value não será inicializado quando o segundo Console.WriteLine() for executado. Essencialmente, o compilador considera possíveis os seguintes dois caminhos de execução de código:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
E AINDA
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Como o compilador considera o segundo caminho uma possibilidade (para o exemplo de código 1), ele gera uma mensagem de erro durante o processo de compilação. Além disso, o Editor de código no Visual Studio Code avisa sobre esse problema exibindo uma linha ondulada vermelha sob value (abaixo do bloco de código).
Para o segundo exemplo de código, o complier conclui que o conteúdo do bloco de código da if instrução sempre será executado (true is always true). O compilador não gera um erro de compilação porque interpreta o segundo exemplo de código para ter um único caminho de execução da seguinte maneira:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Recapitulação
Eis alguns aspetos importantes a ter em conta em termos de blocos de código:
- Quando você declara uma variável dentro de um bloco de código, sua visibilidade é local para esse bloco de código e essa variável não pode ser acessada fora do bloco de código.
- Para garantir que uma variável seja visível dentro e fora de um bloco de código, você deve declarar a variável antes do bloco de código (fora e acima do bloco de código).
- Certifique-se de que as variáveis sejam inicializadas antes que seu código tente acessá-las (para todos os possíveis caminhos de execução de código).