Carregando...

Escopo

Escreva um método chamado mark com um parâmetro: static void mark(int n). Dentro das chaves escreva esse parâmetro com Console.WriteLine(n);. A partir de Main chame mark(4);. A tela deve mostrar uma linha: 4. O nome n existe só dentro de mark. Se você tentar escrever n a partir de Main, a compilação recusa. Essa fronteira — quais nomes um método pode ver — é o que esta página ensina. Mantenha a classe pública chamada Pine.

Nomes que ficam dentro de um método

Na página de sobrecarga, vários métodos paint compartilhavam um nome mas mantinham listas de parâmetros separadas. Aqui o foco é menor: um método, um nome de parâmetro, e onde esse nome pode aparecer. Um parâmetro é um nome que pertence ao método que o declara. Fora das chaves desse método, o nome sumiu.
Abra o arquivo Pine. O nome da classe continua Pine. Esta página não renomeia o tipo. Apague qualquer resto de demo paint se essa forma ainda for tudo o que você tem em Main. Apague qualquer resto twice. Apague qualquer linha ReadLine. O arquivo que você guarda não espera digitação.
Fora de Main, ainda dentro das chaves da classe, escreva static void mark(int n). O corpo tem uma linha de escrita: Console.WriteLine(n);. Mantenha void nesta página. Você está observando visibilidade, não valores de retorno. Salve o arquivo antes de executar. O primeiro programa completo está na caixa seguinte.

O arquivo que você guarda

Esta é a versão que você executa primeiro. Main guarda a chamada. mark guarda a linha de escrita que usa n.

mark writes its parameter

csharp
using System;

public class Pine
{
    public static void Main()
    {
        mark(4);
    }

    static void mark(int n)
    {
        Console.WriteLine(n);
    }
}

Leia de cima. using System; prepara nomes curtos. public class Pine nomeia o tipo. public static void Main() é onde a execução começa. A chamada mark(4) envia 4 para o parâmetro n. Dentro de mark, Console.WriteLine(n) escreve 4. Quando mark termina, o nome n também termina. Main nunca guardou um nome n. O número 4 atravessou a chamada como valor. O nome n não entrou em Main. Uma linha na tela: 4.

Execute com dotnet run. O programa escreve uma linha e para. Não espera você digitar. Se dotnet run esperar, ReadLine ainda está no arquivo. Apague essa linha e mantenha mark(4); mais o método mark acima. A tela mostra 4. Se a tela mostrar ok, uma chamada restante paint("ok") ainda está rodando. Se a tela mostrar a letra n, uma linha de escrita tem aspas: Console.WriteLine("n");. Você não reinstala o SDK .NET por uma tela que mostra a linha errada.

Percorra uma execução completa em ordem. C# começa em Main. A chamada mark(4) envia 4 para o parâmetro n. Dentro de mark, WriteLine(n) escreve 4. Quando mark termina, o nome n também termina. Main nunca guardou um nome n. O número 4 atravessou a chamada como valor. O nome n não entrou em Main.
Se você adicionar Console.WriteLine(n); dentro de Main depois da chamada, a compilação informa que não encontra o nome n. Esse erro é a lição funcionando: n nunca foi declarado em Main. Corrija removendo essa linha de Main, ou declarando outro nome em Main se precisar de um local ali. Não espere que o parâmetro de mark apareça sozinho em Main.

Um nome local ao lado do parâmetro

Dentro de mark você também pode declarar um nome novo que não é parâmetro. Esse nome local vive só entre as chaves de mark. Uma esperança comum de iniciantes é que um nome declarado em Main fique automaticamente visível em cada método da classe. Não fica, nesta forma. Se Main tem int room = 4; e mark tenta escrever room sem recebê-lo, a compilação não encontra room dentro de mark. A correção é passar o valor: mark(room); com mark ainda declarado como mark(int n).

Passar um local de Main para mark

Declare int room = 4; dentro de Main. Chame mark(room);. Dentro de mark, continue escrevendo n. A tela ainda mostra 4. O nome local em Main é room. O nome do parâmetro em mark é n. São nomes diferentes em lugares diferentes. O valor 4 é o que viaja.

pass room into mark

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int room = 4;
        mark(room);
    }

    static void mark(int n)
    {
        Console.WriteLine(n);
    }
}

Este é o segundo arquivo. Ensina a mesma visibilidade com um local em Main. Execute dotnet run. Você ainda vê uma linha: 4. Se mudar room para 9 e deixar o corpo do método intacto, a tela mostra 9. O método ainda escreve o valor que chegou em n. Main também pode escrever room se você adicionar Console.WriteLine(room); em Main — esse nome pertence ali. Main ainda não pode escrever n. Depois de ver a forma room, volte ao arquivo de uma chamada se for a forma que quer guardar: mark(4); em Main.
Se mark declarar o próprio local — por exemplo int tag = 1; dentro das chaves — esse tag é invisível para Main. Tentar Console.WriteLine(tag); em Main falha pelo mesmo motivo que escrever n a partir de Main. As chaves de mark são uma parede para nomes declarados dentro delas.

O que a parede protege

Leia a divisão em palavras simples. Nomes declarados em Main ficam em Main a menos que você passe seus valores numa chamada. Nomes declarados em mark — parâmetros e locais — ficam em mark. A chamada carrega valores, não os nomes em si. A sobrecarga da página anterior é outra habilidade: vários métodos com um nome de método compartilhado. Escopo é sobre onde um nome de variável ou parâmetro pode aparecer no código-fonte.
Uma demo paint restante pode ficar no mesmo arquivo e confundir a tela se Main ainda chamar paint("ok"). Limpe Main até a chamada mark que você está testando. Não aninhe mark dentro das chaves de Main. Métodos ficam dentro da classe, ao lado de Main.
Escrever Console.WriteLine("n"); em Main escreve a letra n entre aspas. Não escreve o parâmetro. Mantenha Console.WriteLine(n) dentro de mark quando quiser o valor que chegou pela chamada. Escrever mark(); com parênteses vazios falha quando o cabeçalho ainda diz mark(int n) — a chamada precisa enviar um int, seja um literal como 4 ou um local como room.

Você pode escrever mark(int n), escrever n dentro desse método, e manter n fora de Main. Você pode declarar room em Main e passar room para mark. A tela mostra o valor que atravessou a chamada. Nomes não vazam sozinhos pelas chaves. A próxima página é recursion, onde um método chama a si mesmo com um argumento menor até uma condição de parada encerrar a cadeia.

A tela guarda o valor que atravessou

O arquivo que você guarda escreve 4 quando Main chama mark(4);. O nome n está na linha de escrita dentro de mark, e a letra n não aparece na tela como rótulo impresso a menos que você a tenha colocado entre aspas. Aninhar mark dentro de Main não é a forma que esta lição constrói.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
6
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo