Le procedure in Visual Basic

In Visual Basic posso definire una procedura usando i comandi Sub / End Sub

Sub(parametri)
...
End Sub

I parametri sono le variabili passate dalla routine chiamante. Sono poste tra parentesi tonde e separate da virgole.

Sub(par1, par2)
...
End Sub

Per ciascun parametro è possibile indicare il tipo tramite la clausola As

Sub(par1 As tipo1, par2 As tipo2)
...
End Sub

I parametri di input e le variabili locali della procedura sono isolate e non si propagano alla routine chiamante.

Nota. C'è però la possibilità di passare dei valori per riferimento tramite la parola ByRef anziché per valore ByVal. Il passaggio per riferimento propaga le variabili della procedura anche alla routine chiamante.

Posso invocare la subroutine da qualsiasi altra parte della routine, indicando il nome e i parametri.

Stampa(par1,par2)

Non è invece possibile usare la procedura nel lato destro delle assegnazioni perché, a differenza di una funzione, la procedura non ha valori di ritorno.

Un esempio pratico

Questa procedura stampa sulla console il contenuto della variabile passata come parametro.

Sub Stampa(testo)
Console.Write(testo)
End Sub

Invoco la procedura passandogli la stringa "Hello"

Stampa("Hello")

La subroutine riceve la stringa "Hello" e la registra nella variabile locale testo.

Poi stampa a video il contenuto della variabile testo

Hello

La differenza tra procedure e funzioni

Una procedura è simile a una funzione.

Come le funzioni ha un nome identificativo e riceve dei parametri in input.

A differenza di una funzione, la procedura non restituisce un risultato di ritorno in output ma si limita a eseguire le istruzioni della routine.

Il passaggio dei parametri ByVal e ByRef

In una procedura i parametri sono passati di default

  • per valore (copia del valore) nel caso dei valori numerici
  • per riferimento (indirizzo di memoria) nel caso delle stringhe e degli oggetti

E' però possibile modificare questa regola.

Posso imporre il passaggio per riferimento a una variabile di valore, anteponendo la parola ByRel al nome del parametro nella dichiarazione della procedura.

Sub nome(ByRel par1)
...
End Sub

In questo modo, qualsiasi modifica apportata alla variabile nella subroutine si propaga anche alla routine chiamante.

Allo stesso modo posso imporre il passaggio per valore tramite la parola ByVal in una variabile di riferimento.

Sub nome(ByVal par1)
...
End Sub

Un esempio pratico

Questa procedura calcola la somma di due interi.

Sub Somma(ByVal a As Integer, ByVal b As Integer, ByRef tot)
Dim tot As Integer
tot = a + b
End Sub

La procedura riceve in input due parametri di valore (a,b) e un parametro di riferimento (tot).

Invoco la procedura passandogli i due valori (5,3) e una variabile locale (totale)

Somma(5,3,totale)

La variabile tot ha lo stesso riferimento, ossia indirizzo di memoria, della variabile totale.

Pertanto, quando la variabile tot diventa pari a 8, anche la variabiale totale assume il valore 8 nella routine chiamante.

In questo modo l'informazione tot si propaga anche all'esterno della procedura.

Il passaggio nominale dei parametri

Data una procedura qualsiasi

Sub Somma(a,b)
...
End Sub

nell'invocazione posso passare i parametri per valore seguendo lo stesso ordine di dichiarazione della procedura

Somma(a,b)

In alternativa, posso passarli in modo in nominale indicando il nome di ogni parametro per espresso.

Somma(b := 2, a := 3)

In quest'ultimo caso, nella chiamata l'ordine dei parametri non è importante.

I parametri opzionali

Nelle procedure è anche possibile indicare dei parametri opzionali usando la parola Optional prima del nome del parametro e un valore predefinito.

Sub nome(par1, Optional par2 = val)

Se un parametro opzionale non è indicato nell'invocazione, VB prende in automatico il valore di default.

Attenzione. E' necessario collocare i parametri opzionali sempre alla fine della lista dei parametri della procedura. In questo modo VB può sempre dedurre l'ordine di presentazione dei parametri.

Esempio

Questa funzione stampa la somma tra due valori

Sub Somma(a As Integer, Optional b As Integer = 0)
Dim tot As Integer
tot = a + b
console.write(tot)
End Sub

Il parametro b è opzionale.

Quindi, se invoco la procedura indicando solo il parametro a, la procedura considera b=0 ed effettua la somma a+b.

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Visual Basic .NET

Il linguaggio di programmazione

Visual Studio