Dichiarazione delle funzioni locali
Definisca funzioni di supporto all'interno dei metodi.
Dichiarazione delle funzioni locali è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
Che cos'è una funzione locale
Una funzione locale è un metodo dichiarato all'interno di un altro metodo. È visibile solo all'interno del membro che la contiene, mantenendo la logica di supporto vicino al punto in cui viene usata e fuori dalla superficie della classe.
Dichiararne una
Scriva la funzione locale come un normale metodo, annidato nel corpo del metodo. Può chiamarla prima o dopo la sua dichiarazione, all'interno dello stesso ambito.
using System;
public class Program
{
public static void Main()
{
int Square(int n) => n * n;
Console.WriteLine(Square(4));
Console.WriteLine(Square(7));
}
}Funzioni locali con corpo a blocco
Le funzioni locali possono avere corpi a blocco completi, con più istruzioni, cicli e proprie variabili locali, proprio come qualsiasi metodo.
using System;
public class Program
{
public static void Main()
{
int Factorial(int n)
{
int result = 1;
for (int i = 2; i <= n; i++) result *= i;
return result;
}
Console.WriteLine(Factorial(5));
}
}Migliorare la leggibilità
Le funzioni locali consentono di dare un nome a una parte della logica senza appesantire la classe con un metodo privato usato da un solo altro metodo. In questo modo il codice correlato rimane raggruppato.
using System;
public class Program
{
public static void Main()
{
string Format(string label, int value) => label + ": " + value;
Console.WriteLine(Format("Score", 90));
Console.WriteLine(Format("Level", 3));
}
}Ricorsione con funzioni locali
Una funzione locale può chiamare sé stessa, rendendo semplice esprimere la ricorsione proprio nel punto in cui serve.
using System;
public class Program
{
public static void Main()
{
int Fib(int n) => n < 2 ? n : Fib(n - 1) + Fib(n - 2);
for (int i = 0; i < 7; i++)
Console.Write(Fib(i) + " ");
Console.WriteLine();
}
}Le funzioni locali possono essere dichiarate dopo l'uso
A differenza delle variabili locali, una funzione locale può essere utilizzata prima, nel metodo, del punto in cui viene dichiarata. Il compilatore risolve l'intero ambito che la contiene.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(Greet("Ada")); // used before declared
string Greet(string name) => "Hello, " + name;
}
}Parametri e tipi restituiti
Le funzioni locali supportano tutto ciò che supportano i metodi normali: più parametri, valori restituiti, parametri ref e out e generics.
using System;
public class Program
{
public static void Main()
{
bool TryHalve(int n, out int half)
{
half = n / 2;
return n % 2 == 0;
}
if (TryHalve(10, out int result))
Console.WriteLine("half is " + result);
}
}Funzioni locali generiche
Una funzione locale può essere generica, con propri argomenti di tipo indipendenti da quelli del metodo che la contiene.
using System;
public class Program
{
public static void Main()
{
T Echo<T>(T value)
{
Console.WriteLine("echoing " + value);
return value;
}
int n = Echo(42);
string s = Echo("hi");
Console.WriteLine(n + " " + s);
}
}Annidare funzioni locali
Le funzioni locali possono contenere a loro volta altre funzioni locali. Quelle interne sono visibili solo all'interno della funzione che le contiene, consentendo livelli di supporto con ambito strettamente limitato.
using System;
public class Program
{
public static void Main()
{
int Compute(int x)
{
int Double(int n) => n * 2;
int AddOne(int n) => n + 1;
return Double(AddOne(x));
}
Console.WriteLine(Compute(5));
}
}Funzioni locali per la convalida degli argomenti
Un modello comune consiste nel convalidare subito gli argomenti e rimandare il lavoro effettivo a una funzione locale. È particolarmente utile con gli iteratori, in modo che la convalida venga eseguita immediatamente.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Range(int start, int count)
{
if (count < 0) throw new ArgumentOutOfRangeException(nameof(count));
return Iterate();
IEnumerable<int> Iterate()
{
for (int i = 0; i < count; i++) yield return start + i;
}
}
public static void Main()
{
foreach (var n in Range(10, 3)) Console.WriteLine(n);
}
}Quando usare le funzioni locali
Scelga una funzione locale quando un helper viene usato da un solo metodo, trae vantaggio da un nome descrittivo o deve accedere allo stato locale del metodo. In questo modo la classe rimane ordinata e la logica è facile da individuare.
using System;
public class Program
{
public static void Main()
{
int total = 0;
void Add(int n) => total += n; // helper tied to this method
Add(3); Add(4); Add(5);
Console.WriteLine(total);
}
}Controllo rapido
Richiami alla memoria che cos'è una funzione locale.
Riepilogo
Le funzioni locali sono helper denominati annidati all'interno di un metodo.
- Sono visibili solo all'interno del membro che le contiene.
- Supportano parametri, valori restituiti,
out/ref, generics e ricorsione. - Possono essere utilizzate prima della loro dichiarazione.
- Sono ideali per gli helper usati una sola volta e per la convalida immediata degli argomenti negli iteratori.
Domande Frequenti
La lezione «Dichiarazione delle funzioni locali» è gratuita?
Sì — il testo completo di «Dichiarazione delle funzioni locali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Dichiarazione delle funzioni locali»?
Definisca funzioni di supporto all'interno dei metodi. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Dichiarazione delle funzioni locali»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Dichiarazione delle funzioni locali
- Closure e variabili catturate
- Funzioni locali statiche
- Funzioni locali e lambda a confronto