Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Usare Funzioni & Procedure

Primi passi verso la programmazione
Primi passi verso la programmazione
Link copiato negli appunti

La creazione di Funzioni e Procedure nel nostro programma è una tecnica programmatica utile per diverse ragioni. Prima di tutto rende il programma più leggibile partizionando dei blocchi di logica che compiono dei lavori definitivi e in più, poiché spesso la stessa cosa deve essere fatta in molti posti diversi, ci permette di riutilizzare del codice.

Per esempio, ti ricordi il programma che abbiamo scritto in precedenza, quando abbiamo combinato in un unico file l'input di una form col suo output nella presentazione? 

<html><head><title>Chiedi e Rispondi</title></head>
<body
<%
clickato = Request.Querystring("clickato")
'se clickato ha un valore, il cliente ha clickato il bottone 
If clickato then
nome = Request.Form("nome")
citta = Request.Form("citta")
Response.write "Ciao " & nome & ",<br> Oooh, " & citta & "&46;&46;&46;, mi piacerebbe venire&46;&46;&46;<br>"
Else
'altrimenti è appena entrato in questa pagina 
Response.Write "<form action='chiedi_rispondi.asp?clickato=truè method='post'>"
Response.Write "<input type='text' name='nomè> "
Response.Write "<input type='text' name='citta'>"
Response.Write "<input type='submit' name='submit' value='dimmelo'> "
Response.Write "</form>"
end if
%>
</body>
</html>

Questo programma, essendo così corto, è certamente leggibile; ma se le righe invece di essere poche fossero diverse centinaia? Con una form molto lunga e con una presentazione complessa basata su un numero di parametri passati da pagine precedenti? Tipo una situazione di e-commerce dove raccogliamo dati di carte di credito?

Guarda un po' com'è bello usando procedure:

<%
Option Explicit
Dim clickato, form
Dim nome, citta
Dim saluti
'--------------------------------------------------------
'Purpose:Dimostra gli oggetti Response e Request
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
call Main()
Sub Main()
'--------------------------------------------------------
'Purpose:contiene l'intera logica dell' applicazione
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
FaiLaTesta() 
clickato = Request.QueryString("clickato")
If NOT clickato then
MostraLaForma()
Else
LeggiLaForma(form)
DaiLaRisposta()
End if
FaiLaCoda()
End Sub
Sub FaiLaTesta()
'--------------------------------------------------------
'Purpose:Scrive HTML header
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
Response.write "<html><head><title>Chiedi e Rispondi</title></head><body>"
End Sub
Sub MostraLaForma()
'--------------------------------------------------------
'Purpose:mostra la form al cliente
'Date: 10 March 2001
'Commenti: 
'-------------------------------------------------------- 
Response.Write "<form action='showproc.asp?clickato=truè method='post'><br>"
Response.Write "come ti chiami?"
Response.Write "<input type='text' name='nomè><br>"
Response.Write "di che citta' sei?"
Response.Write "<input type='text' name='citta'><br>"
Response.Write "<input type='submit' value='dimmelo'>" 
Response.Write "</form>"
End Sub
Sub LeggiLaForma(form)
'--------------------------------------------------------
'Purpose: Legge i dati e mantiene le variabili
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
nome = Request.Form("nome")
citta = Request.Form("citta")
End Sub
Sub DaiLaRisposta()
'--------------------------------------------------------
'Purpose: Produce output
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
Response.write "Ciao " & nome & ",<br> Oooh, " & citta & "&46;&46;&46;, mi piacerebbe venire&46;&46;&46;<br>"
End Sub
Sub FaiLaCoda()
'--------------------------------------------------------
'Purpose:scrive HTML Footer
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
Response.write "</body></html>"
End Sub
%>

Certo che a vederlo in questo contesto sembra un po' strafatto ma immagina che la prossima volta che dobbiamo costruire un file simile ne abbiamo già una metà già scritta. Comunque svilupperemo l'argomento durante il corso di queste lezioni e vedrai che questo metodo è molto utile. Nel programma precedente non ci sono Funzioni ma solo Procedure. Così mettiamone una e vediamo qual è la differenza.

<%
Function ParteDelGiorno()
'--------------------------------------------------------
'Purpose: calcola la parte del giorno per salutare 
'Date: 10 March 2001
'Commenti: 
'--------------------------------------------------------
Dim cheora
cheora = Hour(Now)
Select case cheora
case 8,9,10,11,12
cheora = "Buongiorno"
case 13,14,15,16,17
cheora = "Buon pomeriggio"
case 18,19,20,21,22,23,24
cheora = "Buonanotte" 
case else
cheora = "Spegni il computer e vai a letto"
End Select
ParteDelGiorno = cheora
End Function
%>

Come vedi questa Funzione è certamente riutilizzabile anche se un po' semplice (ma bisogna pur cominciare da qualche parte o no? ;o).

Aggiungi queste due linee nel codice fra:

<%
If NOT clickato then
saluti = ParteDelGiorno()
Response.Write saluti
MostraLaForma()
%>

Come vedi, poiché la funzione ci restituisce un valore, bisogna dargli una variabile per raccogliere l'informazione. Oppure volendo avremmo potuto scriverla direttamene con:

<% Response.write ParteDelGiorno() %>

Allora, in sostanza, abbiamo messo un po' di ordine nel nostro programma. 

Anche se ti sembra un po' troppa strutturato per quello che fa, so di sicuro che mi ringrazierai se per caso ritorni a questo programma fra qualche mese ;o)

Ti consigliamo anche