Salta al contenuto principale

Corso visual basic script\Variabili, stringhe e numeri

Guido Ruggeri su winguidotecnica, 25\12\2009, h. 18.57.

Lezione non mi ricordo più quale.
Anzi, se qualcuno ha tenuto il conteggio, gli chiedo la
cortesia di dirmelo così alla prossima ce lo applico.
Allora, ci siamo ormai un po' tutti resi conto della
trappola in cui ci andavamo a cacciare con l'esercizio 5: un
ciclo da cui non avevamo previsto nessuna via di uscita.
Qualcuno ha fatto delle osservazioni interessanti, tipo
quella che si potrebbe prestabilire un certo numero di cicli
dopo il quale si esce, oppure che si potrebbe sfruttare il
pulsante Annulla che appare nelle finestre aperte da
InputBox, oppure che si dovrebbe fare in modo di poter
uscire premendo Esc oppure Alt F4.
Tutte osservazioni sensate, potremmo inventarcene anche
altre, ma, qualunque criterio si voglia scegliere, è
evidente che c'è ancora qualcosa che dobbiamo imparare.
Ammettiamo, ad esempio, di voler fare che il programma
termini quando l'utente preme il pulsante Annulla in una
delle finestre aperte da InputBox.
Con quello che sappiamo, siamo capaci di realizzarlo?
La risposta è: no.
Ci manca qualcosa che dobbiamo imparare, cioè: come
istruire il nostro programma a prendere delle decisioni.
Ricordate? l'inghippo dell'esercizio 5 è nato quando
abbiamo detto: non sempre vogliamo che le righe di programma
che scriviamo vengano eseguite tutte, una dopo l'altra,
dalla prima fino all'ultima.
Invece noi dobbiamo essere in grado di poter dire al
programma: in questa condizione, esegui le istruzioni che
stanno in queste righe, in quell'altra condizione, invece,
esegui le altre che stanno in quelle altre righe.
Ecco, è uscita fuori finalmente la parola: condizione.
Noi dobbiamo imparare a valutare se certe condizioni
sussistono oppure no.
Nel nostro caso: capire se l'utente ha premuto il pulsante
Annulla, oppure se non l'ha premuto.
Ma prima dobbiamo fare un passo indietro e tornare a parlare
di variabili.
Finora abbiamo fatto qualche esempio di variabile.
Nell'esercizio 2 c'era la variabile Frase, nell'esercizio 3
e nei successivi c'erano le variabili Cognome e Nome.
In tutti i casi si è trattato di variabili destinati a
contenere delle stringhe.
Cos'è una stringa? è un insieme definito di caratteri,
di qualsiasi tipo.
La riga di testo che sto scrivendo adesso, ad esempio, è
una stringa.
Abbiamo anche detto che in VBScript le stringhe si
rapresentano comprendendole tra due segni di virgolette.
Quando parleremo di Javascript, vedremo che lì ci viene
data anche una seconda possibilità, quella di racchiudere
le stringhe anche tra apici, oltre che tra virgolette. Ma in
VBScript questo non è possibile.
Esistono però altri tipi di variabili, cioè le variabili
numeriche.
Un esempio di variabile numerica potrebbe essere:
Base = 10
Un'altra variabile potrebbe essere:
Altezza = 30
10 e 30 sono numeri e non stringhe.
Da cosa ce ne accorgiamo?
Dal fatto che non sono racchiusi tra virgolette.
Cosa significa che sono dei numeri? che possiamo pensare di
farci sopra dei calcoli.
Ad esempio, se Base e Altezza sono riferite ad un
rettangolo, potremmo calcolarne il perimetro.
Avremo:
Perimetro = Base + Altezza + Base + Altezza.
Con i valori di prima, otterremmo un perimetro di 80.
Attenzione a non confondere i numeri con le stringhe
numeriche.
Questo è un esempio di stringa numerica:
Telefono = "3663576903"
è una stringa fatta di numeri, ma che non ha il valore di
un numero.
A nessuno, infatti verrebbe in mente di prendere un numero
di telefono e di sommarlo ad un altro. Insomma, anche se è
rappresentato da numeri, non ci si fanno dei calcoli sopra.
Perciò la stringa rappresentante il numero di telefono
deve essere messa tra virgolette.
Abbiamo quindi capito che le variabili possono contenere
stringhe o numeri.
Adesso, prima di andare avanti, qualche osservazione per chi
ha lavorato con precedenti versioni di Basic.
Ricordate che una volta le variabili dovevano essere
specializzate: una volta definite, o contenevano stringhe,
oppure contenevano numeri.
Se ad esempio usavo la variabile Base per contenere la
stringa "maggiore", poi non potevo usare la stessa variabile
Base per contenere la lunghezza della base maggiore di un
trapezio.
Se cioè scrivevo:
Base$ = "maggiore"
poi non potevo, qualche riga dopo, scrivere:
Base% = 20
Non ci fate caso ai segni di dollaro e di percentuale dopo
la parola base. Venivano usati in precedenti versioni di
Basic per distinguere le variabili destinate a contenere
stringhe da quelle destinate a contenere numeri. A noi non
serviranno questi segni.
In VBScript, infatti, questa distinzione non esiste più,
ed ogni variabile può essere usata indifferentemente per
contenere sia stringhe che numeri.
Quindi in VBScript nulla ci impedisce di scrivere:
Base = "maggiore"
e poi, qualche riga dopo:
Base = 20
Quando mi direte di essere pronti faremo qualche esercizio
sulle variabili numeriche.
A proposito di numeri, chi è allora che si ricorda a quale
lezione siamo arrivati?

Ed ora, un po' di pubblicità

:

***
d.
Giovanni Taverna.
(omissis)
Per calcolare il numero da
applicare alla prossima lezione, fornisco un esempio
ineccepibile:

Lezione = inputbox("lezione precedente")
Lezione = Lezione + 1
MsgBox "Lezione = " & Lezione

r.

Attenzione, Giovanni.
Il concetto è giusto, ma dobbiamo ricordare che siamo in
VBScript.
Così come l'hai scritto tu, si cade in un certo errore che
è tipico di VBScript, mentre mangari sarebbe andato bene
in altre versioni di Basic o in altri linguaggi.
Se provassi ad eseguire il tuo codice, e come lezione
precedente immettessi 12, otterrei alla fine il messaggio:
Lezione = 121
e non, come ci aspettavamo,
Lezione = 13.
Ragioniamoci un po' sopra e cerchiamo di capire perché.
Ricordatevi di qualcosa che avevamo detto a proposito del
concatenamento delle stringhe.

***
d.
Antonio De Angelis.

> ma scusa guido, mi son perso un passaggio a no ci sono
> arrrivato. non capivo perche' il 12 delle lezioni e
> lezione + 1 venivano prese entrambi in considerazione
> anche se lezione + 1 non era una stringa. poi mi son
> guardato la lezione e ho capito che il lezione + 1 non
> era ne una stringa ma una variabile con numero . quindi
> un numero e una variabile possono andare a braccetto.
> giusto?

r.

Per la precisione, Lezione è una variabile numerica, 1 è
un numero, Lezione + 1 è una espressione numerica, cioè
qualcosa che restituisce un numero partendo da altri numeri.
In realtà in VBScript non è proprio corretto dire che
Lezione è una variabile numerica, perché in VBScript non
ci sono variabili numeriche o variabili di stringa. Ci sono
variabili e basta. Variabili che, di volta in volta, possono
contenere numeri oppure stringhe.
Quindi Lezione è una variabile che contiene un numero.
Dirlo così, è più corretto, ma anche più lungo.
Per brevità, diremo variabile numerica. L'importante è
che ci capiamo.

***
d.
Maria Grazia Albaviva.

(rispondendo a Giovanni taverna)

scusa ma questo esempio non riesco a tradurlo in senso logico: nella prima riga con la variabile LEZIONE RICHIAMI UNA FUNZIONE,
NELLA SECONDA RIGA CON LA STESSA VARIABILE RICHIEDI UNA PROCEDURA,
NELLA TERZA RIGA CON LA ROUTINE FAI ESEGUIRE UNA STRINGA CON UNA CONCATENAZIONE DI UNA SOLA VARIABILE.
COME FA IL PRG A SAPERE CHE QUELLA VARIABILE è RICHIAMATA DUE VOLTE, E COME FA A CAPIRE CHE UNA VARIABILE CON LO STESSO NOME HA DUE FUNZIONI DIVERSE?
MI SONO PERSA!!!!!

***
d.
Aniceto Fois.

Per ottenere il valore del perimetro, secondo quanto ho capito, dovresti scrivere:

base = 10
altezza = 30
msgbox "perimetro: " & base + altezza + base + altezza

credo che la cosa funzioni, ora provo anch'io.
d.
Giovanni Taverna.

h:22.07
Perchè se ci aggiungo la stringa mi da errore?
Base=10
Altezza =30
msgbox "perimetro = " Base+Altezza+base+altezza

Maria Grazia Albaviva.

SBAGLIO O QUI MANCA LA CONCATENAZIONE FRA LE DUE VARIABILI: base e altezza?
r.
Guido Ruggeri.

Esatto.
C'è un errore consistente nella mancanza dell'operatore di
concatenamento, dopo la stringa "perimetro = "
La riga corretta è quindi:

msgbox "Perimetro = " & Base+Altezza+base+altezza

R.
Guido Ruggeri.

Così, come l'ha scritta Aniceto, funziona.
Ma non funzionerebbe se avessimo ottenuto base e altezza
come risultato di InputBox.
Cioè se avessimo scritto:
Base = InputBox("Base:")
Altezza = InputBox("Altezza:")
Provate sempre a ragionarci sopra.
Perché così non funzionerebbe? Che cosa succederebbe?
E perché, invece, come l'ha scritta Aniceto,
funzionerebbe?
Ricordatevi che la chiave per capire la differenza sta
sempre nella caratteristica di VBScript di non avere
variabili specializzate nel contenere esclusivamente numeri
oppure esclusivamente stringhe.

***
Alessandro Pannocchi.

a me così funziona.

Lezione = inputbox("lezione precedente")
Lezione = Lezione + 1
MsgBox "Lezione = " & Lezione

Giovanni taverna.

h. 12.49
Forse ho capito : la presenza di inputbox nella variabile produce un
risultato che può essere interpretato come testo; quindi il collegamento in
riga 3porta al semplice collegamento tra i diversi contenuti testuali delle
variabili, non alla loro somma; invece le 2 righe:
Lezione = inputbox("lezione precedente")
Lezione = Lezione +1
funziona perchè il risultato testuale della prima riga viene immesso nella
seconda come numero e, alla presenza di un altro numero con segno + la
somma viene effettuata: infine nella terza riga, l'unico collegamento
presente è & lezione e quindi le cose vanno, ma del tutto casualmente.