1. Funções/Métodos em C#
Você já aprendeu um monte de comandos em C#, então já consegue escrever programas até que bem complexos. 10, 20, 30 linhas de código num programa — nem é tanto assim, né?
Mas um programa com 100+ linhas já é grandinho, e entender o código pode ser complicado. Será que dá pra facilitar a escrita e leitura de programas grandes?
Dá sim, e quem salva a gente são os métodos (funções).
O que é um método? Simplificando muito, método é um grupo de comandos que tem um nome único. Ou seja, a gente junta vários comandos numa "caixinha" e dá um nome pra ela. Pronto, virou método.
Imagina que você tem um código pra desenhar um gato:
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
Olha o que ele mostra:
|\__/,| (`\
|o_o |__ _) )
(____/ (_/
Você pode jogar esse código num método separado e desenhar quantos gatos quiser:
void WriteCat()
{
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
}
//desenha três gatos
WriteCat();
WriteCat();
WriteCat();
Quando o programa roda, toda vez que você chama WriteCat() ele executa todos os comandos dentro do método WriteCat(). A gente basicamente criou um novo comando (método), juntando vários comandos num só grupo.
Pra que servem as funções:
- Dividem o programa em partes, cada uma faz sua tarefa.
- Facilitam o reuso: escreveu uma vez, usa quantas vezes quiser.
- Diminuem a chance de bugs: se der ruim numa função, arruma num lugar só.
- Dão "nomes" pra ações complicadas — o código fica muito mais legível.
Termos: função, método, procedimento
Em C#, função e método geralmente são a mesma coisa, mas tem uns detalhes.
- Método — função que pertence a uma classe ou objeto (em C# quase tudo é método).
- Procedimento — função que não retorna nada (void-métodos).
- Função — no geral, qualquer parte do programa com nome que pode ser chamada.
Oficialmente em C# tudo isso é chamado de método, mas se você ver "função" por aí, relaxa!
2. Sintaxe de declaração de método: explicando cada parte
Bora ver uma função simples, o clássico "Hello, World!", só que colocando o print num método separado:
using System;
class Program
{
static void Main()
{
PrintHello();
}
static void PrintHello() // mostra o texto Hello, World!
{
Console.WriteLine("Hello, World!");
}
}
Explicando a sintaxe:
| Parte | Exemplo | Descrição |
|---|---|---|
| Modificador | |
Diz que o método pertence à classe (mais sobre isso depois) |
| Tipo de retorno | |
Diz que o método não retorna nada |
| Nome do método | |
Nome do método, usado pra chamar ele |
| Parâmetros | |
Argumentos (vazio — sem argumentos) |
| Corpo do método | |
Código que roda quando o método é chamado |
Analogia:
Pensa no método como uma máquina de café: você coloca o dinheiro (argumentos), aperta o botão (chama o método), a máquina faz o café (corpo do método), e te dá o resultado (valor de retorno) — ou não dá nada, se for um void-método!
3. Como chamar métodos
Chamar um método é só escrever o nome dele e parênteses, pronto:
PrintHello(); // Método sem parâmetros
int sum = Add(2, 3); // Método com parâmetros e retorno
Importante: só dá pra chamar um método depois que ele foi declarado (ou se a declaração tá "acima" no código, ou no mesmo classe).
4. Métodos com parâmetros
Dá pra passar parâmetros pro método. Isso deixa o método flexível e adaptável pra várias situações. Na real, parâmetros são variáveis do método, que recebem valores na hora da chamada. Tem que declarar os parâmetros quando cria o método.
static void Greet(string name)
{
Console.WriteLine($"Oi, {name}!");
}
// Usando:
Greet("Alice");
Greet("Bob");
Parâmetros — são variáveis que você passa pro método quando chama ele.
| Parte | Exemplo | Descrição |
|---|---|---|
| Tipo do parâmetro | |
Tipo do valor recebido |
| Nome do parâmetro | |
Nome pra usar dentro do método |
Chamadas:
Greet("Alice"); — name recebe o valor "Alice".
Vários parâmetros
Dá pra declarar vários parâmetros separados por vírgula:
static void PrintSum(int a, int b)
{
Console.WriteLine($"Soma: {a + b}");
}
// Usando:
PrintSum(5, 7); // Soma: 12
5. Parâmetros-valor e parâmetros-referência
Parâmetros de função são variáveis normais, e valem as mesmas regras das outras variáveis.
Então fica ligado: quando você passa um array pro método, você tá passando uma referência pro array, ou seja, o método pode mudar o conteúdo do array. Pros tipos simples (int, double), o valor é copiado.
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Muda o array original!
}
// Usando:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]); //vai mostrar 0
O que rola aqui é basicamente isso:
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // Muda o array original!
}
// Usando:
int[] a = {1, 2, 3, 4, 5};
//ZeroFirstGrade(a);
int[] grades = a;
grades[0] = 0;
Console.WriteLine(a[0]); //vai mostrar 0
GO TO FULL VERSION