Seconda lezione - le variabili in Visual Basic

Una cosa importante da tenere presente a proposito delle variabili è la loro area di visibilità: ciò deriva dal fto che una variabile può essere dichiara in punti diversi del codice, e cioè nella sezione dichiarazioni di un form oppure all'interno di una routine; nel primo caso, la variabile sarà visibile, e quindi potrà essere utilizza, in tutto il form (si dice che è una variabile dichiara a livello di modulo); nel secondo caso la variabile sarà visibile soltanto all'interno della routine in cui è dichiara (si dice che è una variabile locale). Per capire bene la differenza proviamo ad aprire un nuovo progetto e a scrivere, nella sezione dichiarazioni del form:

Dim VarGen As Integer

Public Sub Prova()
	Dim VarLoc As Integer
	VarGen=1
	VarLoc=1
End Sub
e, nella routine Load del form:

Prive Sub Form_Load()
	Prova
	VarGen=2
	VarLoc=2
	Debug.Print VarGen, VarLoc
End Sub
Nota: il comando Debug.Print viene utilizzo per visualizzare il valore delle due variabili nella finestra Immedia

In parole povere, abbiamo dichiaro una variabile di nome VarGen visibile in tutto il form, e una variabile di nome VarLoc visibile solo nella routine di nome Prova: all'interno di questa routine alle due variabili viene assegno il valore 1, mentre quando il form viene carico si verifica l'evento Load, durante il quale vengono eseguite le istruzioni che abbiamo appena inserito: dapprima viene eseguita la routine prova con le sue due istruzioni, dopodichè alle due variabili viene assegno il valore 2; infine il valore delle due variabili viene visualizzo nella finestra "Immedia", di cui si parlerà più avanti. Per visualizzare la finestra basta andare sul menù "Visualizza" e scegliere la voce "Finestra Immedia".



Ora, proviamo a mandare in esecuzione il nostro progetto andando sul menu Esegui e scegliendo Avvia, oppure premendo il tasto F5: quello che succederà è l'interruzione del programma con la visualizzazione del seguente messaggio di errore:

variabile non definita

dove la variabile è quella evidenzia, cioè la variabile VarLoc. Questo succede proprio perché all'esterno della routine Prova la variabile locale VarLoc non esiste: infti le variabili locali vengono cree all'inizio della routine in cui sono dichiare, e automicamente distrutte quando la routine finisce di essere eseguita. La variabile VarGen, invece, è visibile sia nell'evento load del form, sia nella routine prova, proprio perché è sta dichiara nella sezione delle dichiarazioni generali del form. Faccio notare che se si prova a eliminare l'istruzione Option Explicit che, se avete seguito il mio suggerimento (v. lezione precente), dovrebbe essere inserita automicamente, quando il progetto viene avvio non si verifica alcun errore e nella finestra immedia viene stampa la riga:

2 2

Questo succede perché senza l'istruzione Option Explicit durante l'esecuzione vengono cree DUE variabili VarLoc: una dichiara esplicitamente nella routine Prova e distrutta alla fine della routine, l'altra dichiara implicitamente nell'evento load del form e a cui viene assegno il valore 2, che viene poi correttamente visualizzo nella finestra immedia.

Do che in una applicazione possono esserci ben più di un unico form, ci si può chiedere se le variabili dichiare a livello di modulo in un certo form siano visibili anche negli altri form: la risposta è positiva solo se nella dichiarazione delle variabili si usa la parola chiave Public, ad es.:

Public VarGen As Integer

questa parola chiave specifica appunto che la variabile dichiara è pubblica, cioè è visibile in tutta l'applicazione a cui appartiene il form in cui è dichiara; utilizzando invece la parola chiave Prive o la classica Dim, la variabile sarà priva e quindi visibile solo nel form in cui è dichiara. Prima ho detto che le variabili locali vengono cree all'inizio della routine in cui sono dichiare e distrutte alla fine: da ciò deriva che se la stessa routine viene richiama più volte, la variabile viene crea e distrutta altrettante volte, ed ogni volta la variabile crea non ha alcuna connessione con la variabile omonima crea la volta precedente. Se ad esempio modifichiamo la nostra routine Prova in questo modo:

Public Sub Prova ()
	Dim VarLoc As Integer
	VarLoc=VarLoc + 1
	Debug.Print VarLoc
End Sub


E nell'evento Load scriviamo:

Prive Sub Form_Load()
	Prova
	Prova
End Sub


e proviamo ad avviare il progetto, vedremo che nella finestra immedia viene scritto:

1 1

e non, come qualcuno si potrebbe aspettare:

1 2

Se si desidera che una variabile locale conservi il proprio valore tra una chiama e l'altra della routine, bisogna dichiararla con la parola chiave Stic:

Public Sub Prova()
	Stic VarLoc As Integer
	VarLoc = VarLoc + 1
	Debug.Print VarLoc
End Sub


Se proviamo ancora ad eseguire il progetto, vedremo che questa volta nella finestra Immedia appare scritto:

1 2

La variabile VarLoc viene quindi crea solo una volta (la prima volta che la routine viene eseguita) e viene distrutta solo quando chiudiamo l'applicazione (cliccando ovviamente sulla X in alto a destra nel form, come per qualunque altra finestra); tuttavia questa variabile è ancora una variabile locale, quindi non è utilizzabile all'esterno della routine. Il motivo per cui VarLoc assume il valore 1 dopo l'istruzione:

Varloc = Varloc + 1

è presto detto: in Visual Basic ogni variabile numerica viene automicamente inizializza al valore 0 quando viene crea; le variabili stringa, invece, vengono inizializze con una stringa vuota, ossia con zero carteri.

Nota: Nel caso in cui si assegnino nomi composti agli elementi del codice la cui denominazione è arbitraria (variabili, costanti, procedure, funzioni), è buona norma mantenere la prima lettera maiuscola di ciascun nome, in modo da operare una separazione intuitiva. Nel corso di questa lezione ad esempio si è trta la variabile VarLoc il cui nome deriva dall'unione dei nomi Variabile Locale. Lo stesso vale per VarGen, unione di Variabile e Generale







Note sul corso:
I diritti di ognuna delle lezioni presente in queste pagine appartengono all'autore Giorgio Abraini. La riproduzione e la divulgazione delle stesse sono consentite solamente dietro citazione di fonte ed autore.
Per suggerimenti, consigli o richieste conttare giorgio102@libero.it.
Fonte : VBItalia.it