Le procedure sono dei blocchi di codice che permettono di eseguire una serie di istruzioni quando vengono richiamate.
Le Sub sono delle procedure che quando terminano la loro esecuzione, non restituiscono un valoer di ritorno.
Le Function invece oltre ad eseguire il loro codice hanno un valore di ritorno.
Vediamo come si dichiara una procedura Sub:
Sub nomeProcedura (lista parametri)
Dichiarazioni locali ed istruzioni
End Sub
Sub nomeProcedura (lista parametri) costituisce la signature della procedura, mentre il blocco "Dichiarazioni locali ed istruzioni" ne costituiscono il corpo.
Module modProdotto
Sub Main()
Dim a As Integer = 0
Dim b As Integer = 0
Console.Write("Primo fattore: ")
a = Convert.ToInt32(Console.ReadLine())
Console.Write("Secondo fattore: ")
b = Convert.ToInt32(Console.ReadLine())
stampaProdotto(a, b)
End Sub
Sub stampaProdotto(ByVal a As Integer, ByVal b As Integer)
Dim c As Integer = 0
c = a*b
Console.WriteLine("Il prodotto di " & a & " e " & b " vale: " & c)
End Sub
End Module
Quando richiamiamo la funzione stampaProdotto(a, b), ad essa vengono passati i valori a e b.
La procedura esegue il calcolo e stampa il valore a video.
Notiamo la parola chiave ByVal, che sta ad indicare come viene passato il parametro alla procedura: in questo caso viene passata per valore, la procedura ha cioè una copia del valore della variabile e non la variabile stessa.
(Approfondimenti e considerazioni su come sono passati i parametri li vedremo nel prossimo capitolo sul passaggio dei parametri.)
Sono simili alle Sub, ma restituiscono un valore. Per questo motivo nella segnature, occorre specificare il tipo restituito.
Function nomeProcedura (lista parametri) As tipoDiRitorno
Dichiarazioni locali ed istruzioni
Return espressione
End Function
Return espressione è obbligatorio e l'espressione deve essere dello stesso tipo del "tipoDiRitorno" dichiarato nella segnature. Non fa altro che restituire il valore all'espressione chiamante.
Module modProdotto
Sub Main()
Dim a As Integer = 0
Dim b As Integer = 0
Dim c As Integer = 0
Console.Write("Primo fattore: ")
a = Convert.ToInt32(Console.ReadLine())
Console.Write("Secondo fattore: ")
b = Convert.ToInt32(Console.ReadLine())
c = stampaProdotto(a, b)
Console.WriteLine("Il prodotto di " & a & " e " & b " vale: " & c)
End Sub
Function stampaProdotto(ByVal a As Integer, ByVal b As Integer) As Integer
Return c = a*b
End Function
End Module