Valores de retorno
Escreva um método chamado twice que recebe um int chamado n e devolve o dobro desse número. O cabeçalho começa com int, não com void: static int twice(int n). Dentro das chaves escreva return n * 2;. Em Main, escreva o resultado da chamada: Console.WriteLine(twice(7));. A tela deve mostrar uma linha: 14. O próprio twice não chama WriteLine. Só devolve 14. Main escreve esse número. Essa devolução é o que esta página ensina. Mantenha a classe pública com o nome Pine.
Devolver um número a Main
Na página de parâmetros, greet e show escreviam dentro do corpo do método. A chamada enviava um valor, e o método escrevia na tela. Aqui o método ainda recebe um valor, mas também envia um valor para fora. A palavra return marca esse valor de saída. Main pode guardá-lo ou escrevê-lo.
Abra o arquivo Pine. O nome da classe continua Pine. Esta página não renomeia o tipo. Apague qualquer demo greet que só escreve hi lena dentro do método se for tudo o que Main ainda guarda. Apague qualquer resto de ring();. Apague qualquer linha ReadLine. O arquivo que você guarda não espera digitação.
Fora de Main, ainda dentro das chaves da classe, o cabeçalho diz int porque o valor que volta é um int. Entre os parênteses, int n ainda é um parâmetro — a mesma ideia da página anterior. O corpo tem uma instrução: return n * 2;. Isso multiplica n por 2 e devolve o produto a quem chamou twice. Não há Console.WriteLine dentro de twice nesta página. Salve o arquivo antes de executar. O primeiro programa completo está na caixa seguinte.
O arquivo que você guarda
Este é o pequeno programa completo. twice calcula. Main escreve.
using System;
public class Pine
{
public static void Main()
{
Console.WriteLine(twice(7));
}
static int twice(int n)
{
return n * 2;
}
}
Leia de cima. using System; prepara nomes curtos. public class Pine nomeia o tipo. public static void Main() é onde o runtime começa. A chamada twice(7) envia 7 para n. static int twice(int n) guarda return n * 2;. Console.WriteLine escreve o valor que voltou. Uma linha na tela: 14.
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 Console.WriteLine(twice(7)); mais o método twice acima. A tela mostra 14. Se a tela mostrar hi lena, uma chamada greet restante ainda está a correr. Se a tela mostrar as letras twice, uma linha de escrita tem aspas em volta dessa palavra: Console.WriteLine("twice");. 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 twice(7) envia 7 para n. Dentro de twice, return n * 2; calcula 14 e devolve esse 14 a Main. Depois WriteLine escreve 14. twice nunca escreveu sozinho na tela. Se mudar a chamada para twice(3), a tela deve mostrar 6. O corpo do método fica igual; só o argumento muda, e o produto devolvido muda com ele. Se a tela mostrar 7 em vez de 14, você escreveu n dentro de twice ou escreveu o argumento em Main sem chamar twice — ponha o dobro na linha return e escreva o resultado da chamada.
A separação importante é quem fala com a tela. Nesta página, twice fala só com Main através de return. Main fala com a tela através de WriteLine. Por isso o cabeçalho já não pode dizer void: algo tem de voltar para Main escrever. Quando você guarda primeiro o resultado em result, ainda usa a mesma devolução; só atrasa a escrita em uma linha.
Escrever o valor que Main recebeu
Você também pode guardar o valor devolvido num nome dentro de Main antes de escrever. Mude só o número na chamada se quiser outra linha na tela. Deixe return n * 2; em paz.
using System;
public class Pine
{
public static void Main()
{
int result = twice(7);
Console.WriteLine(result);
}
static int twice(int n)
{
return n * 2;
}
}
Este é o segundo arquivo. Ensina o mesmo return com um nome guardado. Execute dotnet run. Isso ainda mostra uma linha: 14. A chamada termina primeiro e preenche result. Depois WriteLine escreve result. As duas formas — escrever a chamada direto, ou guardar depois escrever — usam o mesmo return de twice. twice(0) deve escrever 0. twice(10) deve escrever 20. Cada vez Main escreve o que twice devolveu. Depois de ver a forma guardada, volte ao arquivo de chamada numa linha se for a forma que quer guardar: Console.WriteLine(twice(7)); em Main.
Se twice ainda diz void no cabeçalho mas o corpo tem return n * 2;, a compilação escreve um erro — void significa que nada volta, por isso um return com valor não cabe. Se o cabeçalho diz int mas o corpo não tem return, a compilação também escreve um erro — um método int deve devolver um int nesta forma iniciante. Se o corpo escreve e nunca devolve, você voltou à ideia da página de parâmetros; esta página quer o número nas mãos de Main.
void versus um return tipado
Leia as duas formas lado a lado. Um método void executa o corpo e termina. Um método com return tipado deve devolver um valor com return. Main trata a chamada como esse valor quando o tipo de retorno não é void.
📊 void body versus return
| Shape | What the method does | What Main often does |
|---|---|---|
void show(int n) |
writes inside the body | calls show(9); and may write nothing else |
int twice(int n) |
return n * 2; |
writes or stores twice(7) |
Uma confusão comum é pôr Console.WriteLine(n * 2); dentro de twice e deixar o cabeçalho como int sem return. Então a compilação reclama, ou você muda o cabeçalho de volta para void e já não tem valor para Main escrever a partir da chamada. Outra confusão é escrever return; sem valor enquanto o cabeçalho diz int. Mantenha return n * 2; para o tipo da expressão devolvida coincidir com int. Escrever Console.WriteLine("twice"); em Main escreve a palavra twice; não chama o método. Mantenha Console.WriteLine(twice(7)) quando quiser 14 na tela.
Uma demo greet restante que só escreve hi lena dentro do método pode ficar no mesmo arquivo e confundir a tela. Limpe Main até o WriteLine que usa twice, e mantenha um método que devolve. Não aninhe twice dentro das chaves de Main. Os métodos ficam dentro da classe, ao lado de Main.
Você pode escrever static int twice(int n), devolver um valor calculado e escrever esse valor desde Main. A tela mostra o número que Main recebeu, não uma linha que o método escreveu sozinho. void é o cabeçalho errado quando você precisa de um valor de volta. A página seguinte é overloading, onde mais de um método pode partilhar um nome quando as listas de parâmetros diferem.
A tela guarda o que Main recebeu
O arquivo que você guarda escreve 14 quando Main escreve twice(7). A palavra return está no corpo do método, e return não aparece na tela como um rótulo impresso. Aspas em volta de twice escrevem letras, não o resultado da chamada. Aninhar twice dentro de Main não é a forma que esta lição constrói.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 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