Routine Function (Visual Basic)

Una routine Function è una serie di istruzioni di Visual Basic racchiuse tra le istruzioni Function e End Function. La routine Function esegue un'attività e quindi restituisce il controllo al codice chiamante. Quando restituisce il controllo, restituisce anche un valore al codice chiamante.

Ogni volta che viene chiamata la routine, vengono eseguite le relative istruzioni, a partire dalla prima istruzione eseguibile dopo l'istruzione Function e terminando con la prima istruzione End Function, Exit Function o Return rilevata.

È possibile definire una routine Function in un modulo, una classe o una struttura. Per impostazione predefinita, è Public, ed è quindi possibile chiamarla da qualsiasi posizione dell'applicazione che abbia accesso al modulo, alla classe o alla struttura in cui è stata definita.

Una routine Function può accettare argomenti, ad esempio costanti, variabili o espressioni, che vengono passati dal codice chiamante.

Sintassi di dichiarazione

La sintassi per dichiarare una routine Function è la seguente:

[Modifiers] Function FunctionName [(ParameterList)] As ReturnType
    [Statements]
End Function

I modificatori possono specificare il livello di accesso e le informazioni sull'overload, l'override, la condivisione e lo shadowing. Per altre informazioni, vedere Istruzione Function.

Ogni parametro viene dichiarato nello stesso modo in cui viene dichiarato per le routine Sub.

Tipo di dati

Ogni routine Function ha un tipo di dati, esattamente come ogni variabile. Questo tipo di dati viene specificato dalla clausola As nell'istruzione Function e determina il tipo di dati del valore restituito dalla funzione al codice chiamante. Le dichiarazioni di esempio seguenti illustrano questo concetto.

Function Yesterday() As Date
End Function

Function FindSqrt(radicand As Single) As Single
End Function

Per altre informazioni, vedere "Componenti"in Istruzione Function.

Restituzione di valori

Il valore che una routine Function restituisce al codice chiamante viene denominato valore restituito. La routine restituisce questo valore in uno dei due modi seguenti:

  • Usa l'istruzione Return per specificare il valore restituito e restituisce immediatamente il controllo al programma chiamante. Ciò è illustrato nell'esempio seguente.

    Function FunctionName [(ParameterList)] As ReturnType
        ' The following statement immediately transfers control back
        ' to the calling code and returns the value of Expression.
        Return Expression
    End Function
    
  • Assegna un valore al proprio nome di funzione in una o più istruzioni della routine. Il controllo non viene restituito al programma chiamante finché non viene eseguita un'istruzione Exit Function o End Function. Ciò è illustrato nell'esempio seguente.

    Function FunctionName [(ParameterList)] As ReturnType
        ' The following statement does not transfer control back to the calling code.
        FunctionName = Expression
        ' When control returns to the calling code, Expression is the return value.
    End Function
    

Il vantaggio di assegnare il valore restituito al nome della funzione è che il controllo non viene restituito dalla routine fino a quando non rileva un'istruzione Exit Function o End Function. In questo modo è possibile assegnare un valore preliminare e modificarlo in un secondo momento, se necessario.

Per altre informazioni sulla restituzione dei valori, vedere Istruzione Function. Per altre informazioni sulla restituzione di matrici, vedere Matrici.

Sintassi di chiamata

Per richiamare una routine Function, includerne il nome e gli argomenti sul lato destro di un'istruzione di assegnazione o in un'espressione. È necessario specificare i valori per tutti gli argomenti che non sono facoltativi ed è necessario racchiudere l'elenco degli argomenti tra parentesi. Se non vengono specificati argomenti, è possibile omettere facoltativamente le parentesi.

La sintassi per una chiamata a una routine Function è la seguente:

lvalue = functionname [( argumentlist )]

If (( functionname [( argumentlist )] / 3) <= expression ) Then

Quando si chiama una routine Function, non è necessario usare il relativo valore restituito. In caso contrario, vengono eseguite tutte le azioni della funzione, ma il valore restituito viene ignorato. MsgBox viene spesso chiamato in questo modo.

Illustrazione della dichiarazione e della chiamata

La routine Function seguente calcola il lato più lungo, o ipotenusa, di un triangolo rettangolo, in base ai valori degli altri due lati.

Function Hypotenuse(side1 As Double, side2 As Double) As Double
    Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function

Nell'esempio seguente viene illustrata una chiamata tipica a hypotenuse.

Dim testLength, testHypotenuse As Double
testHypotenuse = Hypotenuse(testLength, 10.7)

Vedi anche