Stefano Bernardoni
a- a+

I cicli

Quando si ha la necessità di eseguire ripetutamenteuna porzione di codice in base a determinate condizioni siutilizzano i cicli
In Coldfusion ci sono svariati tipi di cicli in funzione deltipo di condizione da gestire.
Ecco i più comuni:

Ciclo INDEX (FOR)
Il ciclo INDEX è utile per eseguire un blocco dicodice un numero specifico di volte.
Un esempio:

<cfloop index="i" from="1" to="10" step="1"><cfoutput>#i#</cfoutput> <br></cfloop>

In questo casoil codice interno al loop è ripetuto 10 volte per poiinterrompersi.
L'attributo STEP è facoltativo e di default havalore 1.

Ciclo CONDITIONAL (WHILE)
Il ciclo CONDITIONAL può essere utlizzato quando sivuole eseguire un blocco di codice fino a che una determinatacondizione è verificata:
 

< !--- imposto delle variabili---><cfset var="5"><cfset i="0"><cfloop condition="i LTE var">   <cfset i=i+1>   <cfoutput>#i#</cfoutput> <br></cfloop>


Il ciclo viene eseguito fin tanto che la condizione èTRUE, quando "i LTE var" non è piùvera il ciclo termina

Ciclo QUERY
Il ciclo QUERY ripete il blocco di codice per ognirecord letto da una query:
 

<!--- effettuo la query ---><cfquery name="myquery" datasource="#dsn#">   select nome   from tabella</cfquery><cfloop query="myquery" startrow="1" endrow="10">   <cfoutput>#myquery.nome#</cfoutput><br></cfloop>


Sia startrow che endrow sono opzionali.

Il risultato di un ciclo query è ottenibile ancheutilizzando <cfoutput>:
 <cfoutputquery="myquery">#myquery.nome#</cfoutput>
La scelta dell'una o dell'altra soluzione dipendedalla struttura della pagina e dal rendimento, in genere ilcfloop è più performante e cfoutput nonè nidificabile al contrario di cfloop.

Ciclo LIST
Le liste in coldfusion rappresentano insiemi di datiseparati da uno o più delimitatori.
Utilizzando il ciclo LIST si può separare ognielemento.
 

<!--- creo una lista---><cfset mesi="gen,feb,mar,apr"><!--- eseguo il ciclo---><cfloop index="i" list="#mesi#" delimiters=" ,">   <cfoutput>#variables.i#</cfoutput><br></cfloop>


In questo modo otterremo un elenco che corrisponderàad ogni elemento della lista creata prima del ciclo, e lavariabile "i" assume, ad ogni passaggio, il nomedei mesi seguendo l'ordine della lista.
L'attributo delimiters è facoltativo, di defaultè uguale alla virgola, se la lista è delimitatada un'altro carattere deve essere specificato.

Cicli nidificati

Vediamo ora un'esempio di ciclo nidificato e il suooutput relativo:
 

<cfloop index="esterno" from="1" to="2">  <cfloop index="interno" from="7" to="9">     <cfoutput>    Il ciclo esterno è= #variables.esterno# Il ciclo interno è= #variables.interno#<br>     < /cfoutput>   </cfloop></cfloop>


Il codice viene letto da quello esterno verso quellointerno, quindi al primo passaggio di quello esterno, quellointerno viene eseguito per 3 volte da 7 a 9, dopodichèuscendo ritorna a quello esterno per essere eseguito per laseconda e ultima volta, rientrando in quello interno.
Ma forse per capire meglio quello che succede puòessere utile vedere l'output:

Il ciclo esterno è= 1 Il ciclo interno è=7
Il ciclo esterno è= 1 Il ciclo interno è=8
Il ciclo esterno è= 1 Il ciclo interno è=9
Il ciclo esterno è= 2 Il ciclo interno è=7
Il ciclo esterno è= 2 Il ciclo interno è=8
Il ciclo esterno è= 2 Il ciclo interno è= 9