Espressione di funzione (Visual Basic)

Dichiara i parametri e il codice che definiscono un'espressione lambda di funzione.

Sintassi

Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
  [ statements ]
End Function

Parti

Termine Definizione
parameterlist Facoltativo. Elenco di nomi di variabili locali che rappresentano i parametri di questa routine. Le parentesi devono essere presenti anche quando l'elenco è vuoto. Vedere Elenco parametri.
expression Obbligatorio. Una singola espressione. Il tipo dell'espressione è il tipo restituito della funzione.
statements Obbligatorio. Elenco di istruzioni che restituisce un valore utilizzando l'istruzione Return. (vedere Istruzione return). Il tipo del valore restituito è il tipo restituito della funzione.

Osservazioni:

Un'espressione lambda è una funzione senza un nome che calcola e restituisce un valore. È possibile usare un'espressione lambda in qualsiasi punto in cui è possibile usare un tipo delegato, ad eccezione di un argomento per RemoveHandler. Per altre informazioni sui delegati e sull'uso di espressioni lambda con delegati, vedere Istruzione delegate e Conversione di delegati relaxed.

Sintassi delle espressioni lambda

La sintassi di un'espressione lambda è simile a quella di una funzione standard. Le differenze sono le seguenti:

  • Un'espressione lambda non ha un nome.

  • Le espressioni lambda non possono avere modificatori, ad esempio Overloads o Overrides.

  • Le espressioni lambda non usano una clausola As per designare il tipo restituito della funzione. Al contrario, il tipo viene dedotto dal valore che il corpo di un'espressione lambda a riga singola restituisce o dal valore restituito di un'espressione lambda su più righe. Ad esempio, se il corpo di un'espressione lambda a riga singola è Where cust.City = "London", il tipo restituito è Boolean.

  • Il corpo di un'espressione lambda a riga singola deve essere un'espressione, non un'istruzione. Il corpo può essere costituito da una chiamata a una routine di funzione, ma non da una chiamata a una routine secondaria.

  • Tutti i parametri devono avere tipi di dati specificati o devono tutti essere dedotti.

  • I parametri facoltativi e Paramarray non sono consentiti.

  • I parametri generici non sono consentiti.

Esempio 1

Gli esempi seguenti illustrano due modi per creare espressioni lambda semplici. Il primo usa un oggetto Dim per specificare un nome per la funzione. Per chiamare la funzione, inviare un valore per il parametro.

Dim add1 = Function(num As Integer) num + 1
' The following line prints 6.
Console.WriteLine(add1(5))

Esempio 2

In alternativa, è possibile dichiarare ed eseguire la funzione contemporaneamente.

Console.WriteLine((Function(num As Integer) num + 1)(5))

Esempio 3

Di seguito è riportato un esempio di espressione lambda che incrementa il relativo argomento e restituisce il valore. L'esempio mostra sia la sintassi dell'espressione lambda a riga singola che quella su più righe per una funzione. Per altri esempi, vedere Espressioni lambda.

Dim increment1 = Function(x) x + 1
Dim increment2 = Function(x)
                     Return x + 2
                 End Function

' Write the value 2.
Console.WriteLine(increment1(1))

' Write the value 4.
Console.WriteLine(increment2(2))

Esempio 4

Le espressioni lambda sottoscrivono molti degli operatori di query in LINQ (Language-Integrated Query) e possono essere usate in modo esplicito nelle query basate su metodo. Nell'esempio seguente viene illustrata una tipica query LINQ, seguita dalla conversione della query in formato metodo.

Dim londonCusts = From cust In db.Customers
                       Where cust.City = "London"
                       Select cust

' This query is compiled to the following code:
Dim londonCusts = db.Customers.
                  Where(Function(cust) cust.City = "London").
                  Select(Function(cust) cust)

Per altre informazioni sui metodi di query, vedere Query. Per altre informazioni sugli operatori di query standard, vedere Panoramica degli operatori di query standard.

Vedi anche