Un precedente articolo faceva riferimento a come Impariamo ad usare le procedure, chiamate anche comunemente sub. Vediamo invece ora come usare le "sorelle minori" di questi costrutti di programmazione, ovvero le funzioni. Il vantaggio delle funzioni è quello di ottimizzare la scrittura del codice, evitando di ripetere elenchi di istruzioni utilizzati frequentemente, con la possibilità di restituire un valore.
Creare una funzione
Per creare una funzione possiamo usare la sintassi:
[public | private ] function nomefunzione([parametro1, Parametro2, ParametroN])
' corpo della funzione
end function
public o private
public estende il raggio di azione della funzione anche al di fuori della classe o ruotine di appartenenza, mentre private mantiene visibile la funzione solo alle variabili e funzioni interne. Omettendolo nella dichiarazione, il valore viene impostato automaticamente su public.
function
Dichiara che quella è una funzione.
nomefunzione
Il nome della funzione. Sono consentiti unicamente lettere, numeri (purchè non all'inizio del nome) e caratteri di sottolineatura.
parametri
Possono essere passati dei parametri alla funzione in fase di chiamata. Questi parametri devono essere definiti precedentemente, separati da una virgola. Nel caso la funzione non abbia parametri, è necessario insere comunque le parentesi tonde vuote ().
NB. ASP + VBScript non accetta l'overloading delle funzioni. Questo significa che, a differenza di altri linguaggi, non è possibile definire più metodi con lo stesso nome, anche se differiscono nel tipo e numero di parametri.
Esempio:
Function leggi_ora()
' codice
End function
Function leggi_ora(unadata)
' codice
End function
Il tipo di definizione sopra genera errore. È necessario dichiarare i metodi separatamente.
Function leggi_ora_corrente()
' codice
End function
Function leggi_ora(unadata)
' codice
End function
end function
Determina la fine della funzione.
Restituire il valore
Caratteristica fondamentale di una funzione è quella di restituire un valore. Per restituire un valore, con ASP + VBScript, è sufficiente assegnare il valore da restituire al nome della variabile, come ultima istruzione.
Il nome della funzione deve essere specificato senza parentesi ed eventuali parametri:
nomefunzione = valoredarestituire
e non ad esempio:
nomefunzione(parametro) = valoredarestituire
Richiamare una funzione
Siccome una funzione restituisce un valore, è necessario prevedere in fase di richiamo una collocazione per il valore restituito.
Possiamo decidere di:
- Assegnare il valore ad una variabile
- Assegnare il valore ad un'ulteriore funzione
La chiamata della funzione avviene semplicemente mediante:
nomefunzione(parametri)
Ma ricordandoci quanto prima detto, la sintassi completa è:
' assegnazione ad una variabile
variabile = nomefunzione() ' funzione senza parametri
variabile = nomefunzione(parametro) ' funzione con un parametro
variabile = nomefunzione(parametro, parametro) ' funzione con più parametri
' assegnazione ad una funzione, esempio la stampa
Response.Write(nomefunzione())
' la gestione dei parametri segue l'esempio sopra
Esempio pratico
Per esempio proviamo a scrivere una funzione che ci permetta, data una somma di denaro ed un valore percentuale, di calcolare e restituire il risultato del prodotto ivato.
function calcola_iva(somma, percentuale)
Dichiariamo la funzione, a cui passeremo come parametro la somma su cui calcolare l'iva ed il valore d'iva da calcolare.
Dim totale, iva
Dichiariamo le variabili interne che desideriamo usare per l'elaborazione. Attenzione. Queste variabili non saranno visibili all'esterno della funzione.
if IsNumeric(somma) AND IsNumeric(percentuale) then
Controlliamo che entrambi i valori della somma e della percentuale siano numerici e proseguiamo con l'elaborazione ed il calcolo.
else
totale = -1
end if
Nel caso i valori non siano numerici, possiamo prevedere di restituire un valore predefinito, ad esempio -1.
calcola_iva = totale
Non dimentichiamo alla fine di assegnare il valore di ritorno. Ecco come si presenta la funzione finale:
function calcola_iva(somma, percentuale)
Dim totale, iva
if IsNumeric(somma) AND IsNumeric(percentuale) then
iva = (somma / 100) * percentuale
totale = somma + iva
else
totale = -1
end if
calcola_iva = totale
end function
Che potrà essere richiamata nel codice, quando necessario, semplicemente con la sintassi:
' stampa il totale ...
Response.Write(calcola_iva(3000, 20))
' ... oppure assegna il totale ad una variabile
totale = calcola_iva(3000, 20)