Gestione di un ciclo in vbs (o visual basic script) con brevi nozioni teoriche su cos'e' un tipo di dato
Open Eye realizzazione siti web- info@open-eye.it

Visual Basic Script: Cicli e tipi di dati



Nella prima lezione abbiamo visto degli esempi dei tre macro tipi di istruzioni presenti nel mondo della programmazione; in questa lezione approfondiremo l’argomento vedendo degli altri esempi di cicli, accenneremo brevemente al salto non condizionato e concluderemo esaminando il concetto di tipo di dati.

Scripting in visual basic - Cicli: LoopWhile.vbs

Nella prima lezione abbiamo visto come fare a far ripetere una certa azione al programma per un numero determinato di volte; tuttavia, non sempre sappiamo a priori quante volte far ripetere l’istruzione al nostro computer, ma potremmo semplicemente volergli dire “fino a che non si verifica una determinata situazione continua a ripetere la tale azione”.
L’esempio più comune è quello della password: vogliamo fare un programma che nel caso in cui l’utente digiti la parola d’ordine “pippo” il programma gli risponda “risposta esatta”, altrimenti continui a ripetere la richiesta.

Se proviamo a “tradurlo” come abbiamo imparato la volta scorsa (e come è sempre consigliato fare prima di cominciare a scrivere un programma), risulta qualcosa del tipo “fino a che l’utente non scrive la parola d’ordine “pippo” continua a chiedergli di scrivere qualcosa”.

Proviamo a vedere come scriverlo adesso nel codice: creiamo un nuovo documento e chiamiamolo WhileLoop.vbs

'-------------------------------
' Name: WhileLoop.vbs
' Author: Jeff Skyrunner
' Date: 22/06/10
' Desc: Continua a chiedere la parola d'ordine fino
' a quando l'utente non scrive "pippo"
'------------------------------

' Inizializzo la variabile
sToCompare = “”

' Condizione del ciclo: fino a che sToCompare e' diversa da pippo
' bisogna ripetere la richiesta di parola d'ordine
Do while sToCompare <> "pippo"

' Input Box di lettura del messaggio
sToCompare = InputBox("Scrivi la parola d'ordine")

Loop

MsgBox “Finito!”

Con la prima istruzione

' Inizializzo la variabile
sToCompare = “”

assegniamo alla variabile che ci servirà come confronto il valore “” ovvero “stringa vuota”; l’inizializzazione delle variabili ed i loro tipi li vedremo nelle lezioni successive, ma per adesso vi basti pensare che è come dire che al momento quella variabile “non vale niente” (ma va bene pensare così solo per adesso che siamo alla seconda lezione!).

Il blocco successivo di istruzioni

Do while sToCompare <> "pippo"

' Input Box di lettura del messaggio
sToCompare = InputBox("Scrivi la parola d'ordine")

Loop


viene letto come “fino a che sToCompare è diverso da pippo (while sToCompare <> “pippo”) esegui l’istruzione (Do) di visualizzare una input Box con dentro scritto “Scrivi la parola d’ordine” mettendo quanto scritto dall’utente nella variabile sToCompare (sToCompare = Input Box(“Scrivi la parola d’ordine”)) e ripetila in continuazione (Loop)”.

Infine l’istruzione MsgBox “Finito!” ci serve solo per darci una segnalazione che il programma è effettivamente uscito dal ciclo e termina.

La cosa essenziale da notare è come il controllo di quanto vale sToCompare viene fatto prima che l’istruzione venga eseguita almeno una volta; provate infatti a modificare il programma inizializzando sToCompare a “pippo” in questo modo:

'-------------------------------
' Name: WhileLoop.vbs
' Author: Jeff Skyrunner
' Date: 22/06/10
' Desc: Continua a chiedere la parola d'ordine fino
' a quando l'utente non scrive "pippo"
'------------------------------

' Inizializzo la variabile con il valore “pippo”: in questo modo il ciclo
' non verrà mai eseguito
sToCompare = “pippo”

' Condizione del ciclo: fino a che sToCompare e' diversa da pippo
' bisogna ripetere la richiesta di parola d'ordine
Do while sToCompare <> "pippo"

' Input Box di lettura del messaggio
sToCompare = InputBox("Scrivi la parola d'ordine")

Loop

MsgBox “Finito!”


Lanciando il programma possiamo vedere come arriva subito al messaggio “Finito!”: nel momento in cui il programma arriva all’istruzione Do while sToCompare <> "pippo" , infatti, sToCompare è già uguale a “pippo” e quindi non esegue il ciclo nemmeno una volta.

Questo è uno dei motivi essenziali per i quali l’inizializzazione delle variabili è fondamentale: sbagliare ad inizializzarle o non inizializzarle affatto può portare a degli effetti inaspettati per il vostro programma.

Scripting in visual basic - Cicli: WhileLoop.vbs


Come possiamo fare se volessimo eseguire il ciclo almeno una volta? Dovremmo utilizzare un’altra forma di ciclo, ovvero il Do … Loop While.

Creiamo un nuovo documento e lo chiamiamo LoopWhile.vbs

'-------------------------------
' Name: LoopWhile.vbs
' Author: Jeff Skyrunner
' Date: 22/06/10
' Desc: Continua a chiedere la parola d'ordine fino
' a quando l'utente non scrive "pippo"
'------------------------------

' Condizione del ciclo: fino a che sToCompare e' diversa da pippo
' bisogna ripetere la richiesta di parola d'ordine
Do

' Input Box di lettura del messaggio
sToCompare = InputBox("Scrivi la parola d'ordine")

Loop while sToCompare <> "pippo"

Msgbox “Fatto!”



Il programma è facilmente leggibile: si dice al computer di eseguire (Do) l’istruzione sToCompare = InputBox("Scrivi la parola d'ordine") in continuazione (Loop) fino a che la variabile sToCompare è diversa da “pippo” (sToCompare <> “pippo”).

In questo caso non è necessario inizializzare la variabile, in quanto comunque l’istruzione viene eseguita lo stesso almeno una volta, indipendentemente dal valore iniziale della variabile.

Quando usare un ciclo e quando un altro? Sostanzialmente dipende da quello che volete fare e da quello che vi piace di più…

A titolo di conoscenza generale, esistono anche i cicli Do … Until e While … Wend, ma non li tratteremo in quanto poco flessibili e sconsigliati.

Scripting in visual basic - Il salto non condizionato.

Questo paragrafo è principalmente di carattere nozionistico, dovuto più a ragioni di conoscenza storico/teorica che vera necessità di programmazione… tuttavia, vale la pena di spendere una parola per un concetto che ha fatto la storia della programmazione e che in alcuni (rarissimi) casi torna ancora utile nello scripting moderno: il salto non condizionato.
Questo tipo di istruzione era nata agli albori della programmazione quando non esistevano ancora i cicli e serviva per gestire il flusso del programma (esattamente lo stesso motivo per il quale si utilizzano i cicli) e si poteva tradurre con “se la variabile vale tot, vai alla riga numero x del programma, altrimenti vai alla y”.
Nella programmazione moderna il salto incondizionato è deprecato in quanto può portare facilmente ad errori se utilizzato male, oltre che essere indice di una cattiva conoscenza degli strumenti a nostra disposizione.
In vbs, in particolare, l’unico caso in cui è ammesso l’uso del salto incondizionato (l’istruzione che si adopera è GoTo) è per la gestione degli errori, che affronteremo più avanti in questo corso.

Scripting in visual basic - Cicli: CicloFor.vbs

E se volessimo ripetere un messaggio dieci volte? Beh, la “traduzione” è immediata in questo caso e possiamo vederlo direttamente nel codice, creando il programma CicloFor.vbs

'-------------------------------
' Name: CicloFor.vbs
' Author: Jeff Skyrunner
' Date: 21/06/10
' Desc: Ripete il messaggio 10 volte
'------------------------------

' Ciclo for
For i=1 to 10
msgbox "Sono alla ripetizione numero " + CStr(i)
Next



Il punto centrale del programma è l’istruzione “For … to … Next” che compone il ciclo; al suo interno c’è l’istruzione

msgbox "Sono alla ripetizione numero " + CStr(i)

Che vuol dire “visualizza una finestra che dice “sono alla ripetizione numero “ e visualizza il valore di i” (l’istruzione CStr(i) vuol dire “converti in stringa” e serve per permettere al programma di fare “l’appending della stringa”… ma lo vedremo nelle prossime lezioni); lanciando il programma possiamo quindi notare che ad ogni iterazione il valore di i aumenta di uno, permettendo quindi di “contare” fino a 10.


Un alternativa al ciclo for è il ciclo while, che analizzeremo però nelle prossime lezioni.

Scripting in visual basic - Tipi di dati.

Contrariamente alle altre guide di programmazione, ci siamo gettati subito nella scrittura del codice, in maniera da poter capire subito il concetto “principe” della programmazione, ovvero la traduzione di quello che vogliamo far fare al nostro computer in un algoritmo, ovvero in una serie di istruzioni comprensibili dal computer.

Ora dobbiamo fare un passo indietro e cominciare a vedere un po’ di teoria, partendo da quelli che sono i punti cardine di ogni linguaggio di programmazione, ovvero i tipi di dati. Con “tipo di dato” si intende l’insieme dei tipi ed intervallo di informazioni che possiamo memorizzare in una variabile. I tipi di dati più comuni ed universalmente riconosciuti sono:

• Boolean: è il tipo dati più semplice e contiene i valori “True” e “False”;
• Byte: contiene un valore numerico compreso tra 0 e 255;

• Integer: contiene un valore numerico compreso tra -32.768 e 32.767;

• Currency: contiene un valore numerico compreso tra -922.337.203.685.477,5808 e 922.337.203.685.477,5807;

• Long: contiene un valore numerico compreso tra -2.147.483.648 e 2.147.483.647;

• Single: contiene un valore numerico in virgola mobile e precisione singola (se non conoscete il significato di questi termini non preoccupatevi: è solo matematica…) compreso tra -3,402823E38 e -1,401298E-45 per valori negativi e tra 1,401298E-45 e 3,402823E38 per valori positivi;

• Double: contiene un valore numerico in virgola mobile e precisione doppia (anche qui, non preoccupatevi: la definizione è questa, ma non è il caso di spaccarsi la testa sul significato adesso, se già non lo conoscete) compreso tra -1,79769313486232E308 e -4,94065645841247E-324 per valori negativi e tra 4,94065645841247E-324 e 1,79769313486232E308 per valori positivi;

• Datetime: contiene una data compresa tra il primo gennaio dell’anno 100 ed il 31 dicembre del 9999; le date possono avere vari formati, ma li analizzeremo volta per volta, a seconda dei casi.

• String: contiene un insieme di caratteri (intesi come singola parola o più frasi) di lunghezza variabile da zero a circa due miliardi (i.e. “” è una stringa, così come “a” o “questa è una stringa composta da otto parole e 60 caratteri!”);

• Object: contiene un “oggetto”. Al momento lasciamo un po’ sospesa la definizione di questo tipo di dati in quanto un po’ complessa;



Nonostante in vbs non sia strettamente necessario esplicitare il tipo di dati di una variabile, è sempre bene avere in mente questi tipi di dati, per essere sicuri di non cadere in errori nel momento di conversione o di manipolarli.

A cura di Jeff Skyrunner