Nelle applicazioni ASP molte volte capita di dover tradurre in termini di codice VBScript degli algoritmi che presentano strutture ripetitive o che differiscono solo per qualche parametro.
Procedure cicliche e procedure ricorsive
Normalmente, quando bisogna operare sui dati in modo ripetitivo, si utilizzano delle strutture cicliche, come ad esempio il For? Next o il Do.. Loop, in modo da ?ciclare? sui dati per ottenere un risultato finale.
Quindi se dobbiamo calcolare per esempio il fattoriale di un numero n dovremo costruire un ciclo cha vada da 1 a n moltiplicando l'indice dell'iterazione per ottenere il risultato: 1*2*?n.
Immaginiamo, ad esempio, di lavorare su un catalogo prodotti online con tanto di categorie, sottocategorie e sotto-sottocategorie.
Un modo semplice per poter trovare il nostro prodotto preferito sul sito è quello di avere una struttura ad albero per navigare all'interno delle categorie e dei vari livelli di sottocategorie.
Basterebbe aprire il ramo della categoria di interesse per avere l'elenco delle relative sottocategorie e aprire successivamente la sottocategoria di interesse per avere l'elenco delle sotto-sottocategorie.
La prima cosa che ci verrebbe in mente dal punto di vista della programmazione è quella di dover utilizzare cicli nidificati uno dentro l'altro per poter giungere al ramo scelto: un primo ciclo sulle categorie, un secondo ciclo sulle sottocategorie e così via fino ad arrivare all'ultimo livello dell'albero.
Ogni ramo che viene aperto o chiuso costituisce una struttura isolata che può essere ripetuta su ogni livello dell'albero.
Spostiamo un attimo la nostra visuale e immaginiamo di non ciclare sui dati ma di ciclare sul codice che stiamo scrivendo per espandere il ramo e in quest'attimo abbiamo pensato a una procedura ricorsiva.
Alla stessa stregua della struttura ad albero, possiamo immaginare di fare la stessa cosa sul calcolo del fattoriale di un numero, ovvero prendere non più i numeri da moltiplicare fra loro ma il codice che li moltiplica e fare un ciclo sul codice.
Molti linguaggi di programmazione prevedono la possibilità di scrivere delle procedure ricorsive, cioè procedure che richiamano sè stesse nella loro definizione.
Il concetto di ricorsività non è nuovo per quanto riguarda la programmazione in generale. Questo è possibile, sebbene non molto messo in pratica, anche in VBScript e quindi realizzabile in ambiente ASP.
Ciò vuol dire che mentre stiamo scrivendo una ? Sub ? o una ? Function ? possiamo già utilizzare una chiamata a tale ? Sub ? o ? Function ?, prima ancora del fatidico ? End Sub ? o ? End Function ?.
Applicazioni pratiche: il fattoriale?
Per chiarire la differenza tra una procedura ciclica e un procedura ricorsiva diamo uno sguardo al classico esempio del fattoriale.
Il fattoriale calcolato in maniera ciclica potrebbe essere:
Function Fatt(n) Dim i,s s=1 If n = 0 then Fatt = 1 Else For i = 1 to n s = s*i Next Fatt = s End If End Function
Mentre il fattoriale calcolato in maniera ricorsiva:
Function Fattoriale(n) If n=0 then Fattoriale = 1 Else Fattoriale = n*Fattoriale(n-1) End If End Function
Nel secondo caso possiamo subito notare la ?stranezza? della chiamata alla funzione stessa in fase di definizione, che fa sparire il costrutto For? Next.
Inutile dire che funziona e che presenta un codice molto più elegante e compatto rispetto al primo caso.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.