Terza Lezione
Sommario:
Strutture di controllo di VBScript
- Logica condizionale
- Logica ciclica
- Logica ramificata
Ora entriamo in un settore fondamentale, molto usato nella programmazione e soprattutto affascinante perchè
mette in luce le potenzialità senza limiti della logica riferita allo sviluppo delle applicazioni informatiche.
Logica condizionale
Guardate quanto è bello, nella sua semplicità, questo ragionamento estrapolato da "Asp 3 per
esempi" di D.Bochicchio:
If....then
<%
Dim intA, intB
intA = 4
intB = 2
If intA > intB then
Response.Write intA & " è maggiore di "& intB
end if
%>
Output:
4 maggiore di 2
Se però inverto i valori delle variabili non otterrò alcun risultato. Quindi posso aggiungere:
<%
Dim intA, intB
intA = 2
intB = 4
If intA > intB then
Response.Write intA &" è maggiore di
" & intB
else
Response.Write intB & " è maggiore di "
& intA
end if
%>
Output:
4 maggiore di 2
Poi ci accorgiamo
che, se diamo i valori, per esempio, di 2 e 2 alle variabili, avremo un output
secondo cui 2 è maggiore di 2. Quindi dobbiamo aggiungere:
<%
Dim intA, intB
intA = 2
intB = 2
If intA > intB then
Response.Write intA &" è maggiore di
" & intB
elseIf (o elsif) intA = intB then
Response.Write intB & " è uguale a "
& intA
else
Response.Write intB & " è maggiore di "
& intA
end if
%>
Output:
2 è uguale a 2
Eppure l'applicazione ha bisogno di un ulteriore controllo per il caso in cui uno dei termini non sia un numero intero:
<%
Dim intA, intB
intA = 2
intB = "Pippo"
If isNumeric(intA) AND isNumeric(intB)then
If intA > intB then
Response.Write intA &"
è maggiore di " & intB
elseIf intA = intB then
Response.Write intB &
" è uguale a " & intA
else
Response.Write intB &
" è maggiore di " & intA
end if
else
Response.Write "Perchè
l'applicazione sia eseguita occorrono due numeri interi"
end if
%>
Output:
Perchè l'applicazione sia eseguita occorrono due numeri interi
Select Case
Abbiamo visto che le istruzioni If ed Else possono essere anche più di una. E' opportuno, comunque,
non oltrepassare due o tre livelli. Se le condizioni vanno applicate, ad esempio, a 10 o più livelli, ci serviremo dell'istruzione Select Case.
Esempio:
<%
Dim scelta
scelta = "Aereo"
Select Case scelta
Case "Treno"
Response.Write "Viaggerò in Aereo"
Case "Auto"
Response.Write "Viaggerò in Auto"
Case "Aereo"
Response.Write "Viaggerò in Aereo"
End Select
%>
Ovviamente l'output sarà:
"Viaggerò in Aereo". Il listato ci sembra non abbia
bisogno di spiegazioni.
Logica Ciclica
Ci evita di scrivere più volte una stessa istruzione. Anche qui estrapoleremo gli esempi
dal testo "Asp 3 per esempi" perchè, oltrechè spiegare i cicli,
contengono anche altre istruzioni.
For....Next
<%
Dim arrParDis(5)
arrParDis(0) = 0
arrParDis(1) = 4
arrParDis(2) = 9
arrParDis(3) = 5
arrParDis(4) = 2
For
item = 0 to ubound(arrParDis)-1
Response.Write "<li>" & arrParDis(item)
If (arrParDis(item)mod 2) <> 0 then
Response.Write " è un numero dispari."
else
Response.Write " è un numero pari."
end if
Next
%>
L'output è il seguente:
Geniale, vero? Per eventuali spiegazioni, parliamone nel forum.
For each...nex
Questa istruzione si utilizza per accedere ad elementi memorizzati in una serie di informazioni come, ad esempio, un array.
Esempio:
<%
Nomi = array("Gianni", "Sergio", "Giorgio")
For each x in Nomi
Response.Write x & "<br>"
Next
%>
Output:
Gianni
Sergio
Giorgio
Do...loop
Questo ciclo, rispetto a for...next, ha il vamtaggio che le operazioni contenute al suo
interno vengono ripetute fino a quando è rispettata la condizione
Ve ne sono tre.
Esempio:
Do...until item = 30
item = item + 1
Loop
significa: fino a che item non sarà uguale a 30 aumentane il valore di un'unità.
Esempio:
Do While item <> 30
item = item + 1
Loop
significa: finchè item è diverso da 30 aumentane il valore di un'unità.
While...Wend è sostanzialmente uguale a Do While...Loop
Logica ramificata
Evita di ripetere la scrittura di codice nel caso in cui questo sia ripetitivo. Si realizza
mediante le funzioni e le subroutine.
Subroutine
In una variabile si inserisce una certo numero o una stringa; in una subroutine oppure in una
funzione si inserisce un insieme di righe di codice che poi si possono
richiamare quando occorre. Subroutine e funzioni si somigliano, solo che queste ultime
vengono usate per calcoli numerici mentre le prime per codice generico.
La funzione si crea assegnandole un nome seguito da (), digitando poi il codice
relativo e concludendo con "end sub". La funzione si richiama con "Call"
+ il nome della subroutine (Es.: Call Pippo()). Il richiamo della subroutine in
una pagina può avvenire sia prima che dopo l'inserimento della sub. Se occorre
che, all'interno del listato della sub, dobbiate uscire dalla stessa, il comando
relativo è "Exit sub".
Se la subroutine non è inserita nello script contenente anche l'istruzione Call,
va inserita tra i tag <head> e </head>.
Lo scopo delle subroutine e delle funzioni è quello di evitare di riscrivere
serie di istruzioni il cui output dovrà ripresentarsi in più di una pagina. Il
sistema più idoneo è quello di salvare subroutine e funzioni in un file
con estensione .inc e richiamarlo nella pagina con un'istruzione di questo tipo:
<!-- #include file = "tools.inc" -->) il file richiamato, ovviamente,
dovrà trovarsi nella stessa directory della pagina che lo richiama diversamente
dovrà scriversi:
<!-- #include file = "altraCartella/tools.inc" -->
Con riferimento all'esempio qui sotto, ogni volta che avrò bisogno di scrivere
quella serie di nomi, dopo aver inserito all'inizio della pagina l'include,
potrò scrivere, nel punto in cui desidero la visualizzazione, Call ScriviNomi
(Nomi); nel caso di una funzione potrò richiamarla con Response.Write
NomeDellaFunzione.
Esempio:
<%
Sub ScriviNomi(Nomi)
Response.write "Pippo" & "<BR>"
Response.write "Maria" & "<BR>"
Response.write "Carlo" & "<BR>"
Response.write "Anna" & "<BR>"
Response.write "Alberto"
End sub
Call ScriviNomi(Nomi)
%>
Output:
Pippo
Maria
Carlo
Anna
Alberto
Funzioni
Esempio:
<%
Sub UnMezzo(Valore)
DivisionePerDue=Numero/2
Response.write DivisionePerDue
End sub
Dim Numero
Numero = 1000
Call UnMezzo(Valore)
%>
Output: 500
Se vi sono problemi su questa o su successive lezioni, comunicatecelo nel
forum oppure scriveteci.
Stampa questa pagina
|