1. Funzioni/Metodi in C#
Hai già imparato un sacco di comandi in C#, quindi puoi scrivere programmi abbastanza complessi. 10, 20, 30 righe di codice in un programma — non è poi così tanto, giusto?
Ma un programma con 100+ righe — quello sì che è grande, e capirci qualcosa diventa difficile. Si può semplificare la scrittura e la lettura di programmi con tanto codice?
Sì, e qui ci vengono in aiuto i metodi (funzioni).
Ma che cos'è un metodo? Se la facciamo semplice, un metodo è un gruppo di comandi con un nome unico. In altre parole, raggruppiamo alcune istruzioni, gli diamo un nome unico, e voilà — ecco il metodo.
Supponiamo che tu abbia del codice per disegnare un gatto:
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
Ecco cosa stampa:
|\__/,| (`\
|o_o |__ _) )
(____/ (_/
Puoi semplicemente spostarlo in un metodo separato e disegnare quanti gatti vuoi:
void WriteCat()
{
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
}
//disegniamo tre gatti
WriteCat();
WriteCat();
WriteCat();
Quando il programma parte, ogni volta che esegui il comando WriteCat() verranno eseguite tutte le istruzioni dentro il metodo WriteCat(). Abbiamo semplicemente creato un nuovo comando (metodo), raggruppando più istruzioni.
Perché usare le funzioni:
- Dividono il programma in parti, ognuna con il suo compito.
- Semplificano il riutilizzo: scrivi una volta, usi quante volte vuoi.
- Riduci la probabilità di errori: se c'è un bug nella funzione, lo sistemi in un solo posto.
- Danno "nomi" alle azioni complesse — il codice diventa molto più leggibile.
Terminologia: funzione, metodo, procedura
In C# i termini funzione e metodo di solito significano la stessa cosa, ma ci sono piccole differenze.
- Metodo — funzione che appartiene a una classe o a un oggetto (in C# praticamente tutto sono metodi).
- Procedura — funzione che non restituisce un valore (void-metodi).
- Funzione — in senso ampio, qualsiasi parte del programma con un nome che puoi chiamare.
Ufficialmente in C# si chiamano tutti metodi, ma se più avanti trovi "funzione" — non ti spaventare!
2. Sintassi della dichiarazione di un metodo: analizziamo tutto
Vediamo una funzione semplicissima, la classica "Hello, World!", ma spostiamo la stampa in un metodo separato:
using System;
class Program
{
static void Main()
{
PrintHello();
}
static void PrintHello() // stampiamo il testo Hello, World!
{
Console.WriteLine("Hello, World!");
}
}
Analisi della sintassi:
| Parte | Esempio | Descrizione |
|---|---|---|
| Modificatore | |
Indica che il metodo appartiene alla classe (dettagli — più avanti) |
| Tipo di ritorno | |
Indica che il metodo non restituisce nulla |
| Nome del metodo | |
Nome del metodo, usato per chiamarlo |
| Parametri | |
Argomenti (vuoto — nessun argomento) |
| Corpo del metodo | |
Codice eseguito quando chiami il metodo |
Analogia:
Un metodo è come una macchinetta del caffè: metti i soldi (argomenti), premi il pulsante (chiami il metodo), la macchina fa il caffè (corpo del metodo), e ti dà il risultato (valore di ritorno) — oppure no, se è un void-metodo!
3. Come chiamare i metodi
Chiamare un metodo — basta scrivere il suo nome e le parentesi tonde, tutto qui:
PrintHello(); // Metodo senza parametri
int sum = Add(2, 3); // Metodo con parametri e risultato
Importante: puoi chiamare un metodo solo dopo che è stato dichiarato (o se la dichiarazione è "sopra" nel codice, oppure nello stesso classe).
4. Metodi con parametri
Puoi passare parametri a un metodo. Questo rende il metodo flessibile e personalizzabile per ogni situazione. In pratica i parametri sono variabili del metodo, a cui assegni valori quando chiami il metodo. I parametri vanno specificati quando crei il metodo.
static void Greet(string name)
{
Console.WriteLine($"Ciao, {name}!");
}
// Uso:
Greet("Alice");
Greet("Bob");
Parametri — sono variabili a cui passi valori quando chiami il metodo.
| Parte | Esempio | Descrizione |
|---|---|---|
| Tipo del parametro | |
Tipo del valore accettato |
| Nome del parametro | |
Nome da usare nel metodo |
Chiamate:
Greet("Alice"); — name riceve il valore "Alice".
Più parametri
Puoi dichiarare più parametri separati da virgola:
static void PrintSum(int a, int b)
{
Console.WriteLine($"Somma: {a + b}");
}
// Uso:
PrintSum(5, 7); // Somma: 12
5. Parametri-valore e parametri-riferimento
I parametri di una funzione sono variabili normali, e valgono le stesse regole delle altre variabili.
Quindi ricorda: quando passi un array a un metodo, passi il riferimento all'array, cioè il metodo può modificare il contenuto dell'array. Per i tipi semplici (int, double), viene copiata solo il valore.
static void ZeroFirstGrade(int[] voti)
{
voti[0] = 0; // Cambia l'array originale!
}
// Uso:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]); //stampa 0
In pratica succede questo:
static void ZeroFirstGrade(int[] voti)
{
voti[0] = 0; // Cambia l'array originale!
}
// Uso:
int[] a = {1, 2, 3, 4, 5};
//ZeroFirstGrade(a);
int[] voti = a;
voti[0] = 0;
Console.WriteLine(a[0]); //stampa 0
GO TO FULL VERSION