Salta al contenuto principale

Corso vbs\Accorgimenti per ridurre la probabuilità di errore

Guido Ruggeri su winguidotecnica, 15\01\2010, h. 14.43.

Negli ultimi esercizi che avete svolto, avete cominciato a
rendervi conto di quanto sia facile confondersi o sbagliare
mentre si scrive un codice sorgente.
Basta scrivere una lettera al posto di un altra, oppure
diverso al posto di uguale, ed ecco che il funzionamento del
programma è compromesso.
Banali errori possono arrivare così a vanificare tutto il
lavoro di progettazione del programma.
Così oggi apriamo una parentesi per parlare di quali
accorgimenti conviene prendere per ridurre le probabilità
di commettere errori.
Dico ridurre, perché annullarle è impossibile. Per non
commettere errori, alla fine, c'è soltanto un modo: porre
molta attenzione quando si lavora, controllare il lavoro col
massimo scrupolo, svolgere quanto più possibile prove di
funzionamento.
Comunque, abbiamo due sistemi che ci permettono di avere un
maggior controllo sul risultato del nostro lavoro.
1. fare abbondante uso dei commenti;
2. abilitare la dichiarazione obbligatoria delle variabili.
Cominciamo quindi a parlare dei commenti.
I commenti sono delle annotazioni che possiamo liberamente
inserire all'interno del nostro codice sorgente, scrivendoci
quello che vogliamo.
Non fanno parte del flusso del programma, perciò in fase
di esecuzione l'interprete li ignora. Infatti i commenti
servono soltanto a noi nella fase di scrittura del codice
sorgente.
Sono molto utili per documentare il programma che scriviamo,
cosa molto utile soprattutto per il caso in cui quel codice
sorgente debba poi essere usato anche da altri
programmatori.
Il nostro interprete VBScript identifica l'inizio di un
commento con la parola Rem.
Rem è l'abbreviazione della parola inglese "remark".
Quando una riga inizia con Rem, quella riga, in fase di
esecuzione, è come se non ci fosse.
Facciamo un esempio.

Ed ora, un po' di pubblicità

:

Rem Qui inizia il programma
Cognome = "Ruggeri"
Rem ho assegnato il mio cognome, sotto forma di stringa,
alla variabile Cognome
Nome = "Guido"
Rem ho assegnato il mio nome, sotto forma di stringa, alla
variabile Nome
Msgbox "Io mi chiamo: " Nome & " " & Cognome
Rem ho fatto apparire in una finestra il contenuto della
variabile Nome
Rem concatenato a quello della variabile Cognome, facendoli
precedere
Rem dalla dicitura introduttiva "Io mi chiamo: "
Rem Qui finisce il programma.

Se salviamo queste righe in un file .vbs e lo eseguiamo, il
programma viene eseguito normalmente, come se le righe che
iniziano con Rem non ci fossero.
La parola Rem, scomoda da usare, può essere sostituita con
il più comodo segno dell'apice. Quello che, nella tastiera
italiana, è a destra dello 0.
Così possiamo più semplicemente scrivere:

' Qui inizia il programma
Cognome = "Ruggeri"
' ho assegnato il mio cognome, sotto forma di stringa, alla
variabile Cognome
Nome = "Guido"
' ho assegnato il mio nome, sotto forma di stringa, alla
variabile Nome
Msgbox "Io mi chiamo: " Nome & " " & Cognome
' ho fatto apparire in una finestra il contenuto della
variabile Nome
' concatenato a quello della variabile Cognome, facendoli
precedere
' dalla dicitura introduttiva "Io mi chiamo: "
' Qui finisce il programma.

Non necessariamente un commento deve occupare un'intera
riga. I commenti si possono scrivere anche alla fine di una
riga, dopo le istruzioni di programma, senza andare a capo.
Così:

' Qui inizia il programma
Cognome = "Ruggeri" 'ho assegnato il mio cognome, alla
variabile Cognome
Nome = "Guido" 'ho assegnato il mio nome, sotto forma di
stringa, alla variabile Nome

L'uso dei commenti aiuta a evitare di commettere errori. Ad
esempio, quando si hanno dei blocchi If - End If nidificati
tra di loro, di quelli che quando iniziano a complicarsi non
ci si raccapezza più niente.
Facciamo un esempio, agganciandomi ad uno degli ultimi
esercizi che abbiamo svolto:

'Inizio del primo blocco If
If Risposta = "Garibaldi" Then
MsgBox "Risposta esatta"
Else 'caso Else relativo al primo blocco If
'Il secondo blocco if è nidificato nel caso Else del
primo blocco If
'Inizio del secondo blocco If
If Risposta = "garibaldi" Then
MsgBox "Risposta esatta, ma avresti dovuto scriverla
con l'iniziale maiuscola"
Else 'caso Else relativo al secondo blocco If
MsgBox "Risposta errata"
End If 'Chiusura del secondo blocco If
End If 'Chiusura del primo blocco If
'Fine del programma

Adesso parliamo della dichiarazione obbligatoria delle
variabili.
Abbiamo già detto che VBScript è abbastanza elastico, e
non ci obbliga a dichiarare preliminarmente le variabili di
cui fa uso il nostro programma.
Le istruzioni per dichiarare le variabili sono: Dim, Public,
Private.
Lasciamo da parte, per ora, le ultime due, e consideriamo
l'istruzione Dim.
Abbiamo visto che possiamo iniziare un programma
direttamente così:

Cognome = "Ruggeri"
Nome = "Guido"

ma è più ordinato farlo iniziare con la dichiarazione
delle variabili di cui il programma farà uso. Così:

Dim Cognome
Dim Nome
Cognome = "Ruggeri"
Nome = "Guido"

In entrambi i casi, supponiamo che, andando avanti, mi
sbaglio a scrivere la variabile Cognome.
Ad esempio, scrivo:

Msgbox "Io mi chiamo: " & Nome & " " & Congome

Ho scritto Congome, con la n prima della g, anziché
Cognome. Insomma, ho scritto Cognome in mariese.
Se non me ne accorgo, quando si andrà ad usare il
programma, apparirà la scritta:

"Io mi chiamo: Guido "

Non appare il cognome, perché la variabile che ho
concatenato nell'argomento di Msgbox è Congome, non
Cognome. E Congome, per l'interprete, è una variabile
diversa da Cognome e mai usata prima, e perciò non
contiene nessun valore.
Questo succede sia se non ho dichiarato le variabili, sia se
le ho dichiarate. Infatti, in entrambi i casi, la variabile
Congome, mai dichiarata e mai usata prima, non contiene
nulla.
Insomma, c'è un errore nel programma, di cui però
rischio di non accorgermi, perché, nonostante l'errore, il
programma funziona.
Quando lo vado a provare, se non ci presto sufficiente
attenzione potrei benissimo non accorgermi che nella
finestra viene solo il nome senza il cognome.
Ma supponiamo che io dica all'interprete: voglio che la
dichiarazione delle variabili sia obbligatoria.
In tal caso, l'interprete si accorgerebbe che Congome è
una variabile che non dovrebbe esistere, perché non è
stata dichiarata.
Perciò, tentando di eseguire il programma, otterremmo un
messaggio di errore, che ci direbbe:
Variabile non definita: 'Congome'.
Avremmo così la possibilità di individuare dove sta
l'errore e di correggerlo.
Avremmo, è vero, delle seccature in più, perché il
programma non potrebbe partire finché tutte le variabili
non fossero regolarmente dichiarate. Ma avremmo anche un
maggior controllo su quello che stiamo scrivendo, con la
possibilità di accorgerci se abbiamo scritto male qualche
variabile.
L'istruzione per abilitare la dichiarazione obbligatoria
delle variabili la dobbiamo scrivere all'inizio del
programma. L'istruzione è:

Option Explicit

Quindi il nostro programma diventa:

Option Explicit
Dim Cognome
Dim Nome
Cognome = "Ruggeri"
Nome = "Guido"
Msgbox "Io mi chiamo: " & Nome & " " & Congome

In questo modo, se nell'ultima riga scrivo erroneamente
Congome, il programma non parte nemmeno. Ho così modo di
rendermi conto che qualcosa non va.
Allora, ricordiamoci:
Option Explicit
come prima riga,
poi dichiarare tutte le variabili con Dim.
E' così che si riduce la possibilità di fare errori di
scrittura.

d.

> chiaro.
> ma una domanda
> tu dici che le dichiarazioni delle variabili vanno messe
> all'inizio.e attivare l'Option Explicit ma mettiamo il
> caso che io scrivessi.
>
> Option Explicit
> Dim Nome
> Dim Cognome
> nome = "Antonio"
> Cognome = "De Angelis"
> MsgBox "Io mi chiamo: " & nome & cognome
> se volessi continuare questo programma scrivendo anche la
> mia età. posso continuare scrivendo
>
> Dim Anni
> anni = ""39"
> MsgBox "Ed ho: " & anni & ", anni."
> ho la dichaiarzione dim anni la devo mettere
> obbligatoriamente all'inizio?

r.

Di questo avevamo già parlato.
Le dichiarazioni non devi necessariamente metterle tutte
all'inizio, tuttavia, per una questione di ordine, è bene
abituarsi a farlo.
Invece l'istruziome Oprion Explicit, quella si, va messa
all'inizio.
***
d.

non so se l'ing. condivide ma credo che vada messo così:

Option explicit
Dim N1
Dim N2
Dim N3
N1= 5000 'cifra massima
N2= csng(inputbox("somma esborso"))
n3= 500 ' cifra minima
If N2