0Pricing
C# Academy · Lezione

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

  1. Dichiarazione delle funzioni locali
  2. Closure e variabili catturate
  3. Funzioni locali statiche
  4. Funzioni locali e lambda a confronto
← Torna a C# Academy