Blocchi If-Else, switch, operatori decisionali e booleani, short-circuiting
CONTROLLI DI FLUSSO
I processi condizionali permettono ai programmatori diprodurre in output codice differente basandosi su condizionispecifiche. Ci sono due strutture condizionali in ColdFusion:i blocchi <cfif>
e i blocchi<cfswitch>
.
Blocchi if-Else
La sintassi per la condizione gestita da<cfif>
viene mostrata qui sotto:
<cfif condizione> Hello World!</cfif>
Nel codice soprastante, la scritta "Hello World"verrà mostrata solamente se la condizione èvera.
La sintassi per la condizione <cfif><cfelse>è invece la seguente:
<cfif condizione> Hello World!<cfelse> Goodbye World!</cfif>
La sintassi per il blocco<cfif><cfelse><cfelseif> è quellamostrata qui sotto:
<cfif condizione> Hello World!<cfelseif altra_condizione> World, are you there? <cfelse> Goodbye World! </cfif>
Possono esserci un numero illimitato di blocchi<cfelseif>
, ma al massimo un solo blocco<cfelse>
.
Blocco switch
Il blocco formato dal tag <cfswitch>
è simile a quello di <cfif>
, adeccezione del fatto che si può effettuare un controllodi uguaglianza per una sola singola espressione. Nonpuò essere usato quindi per controllare se un valoreè più alto di un altro.
<cfswitch expression="#language#"> <cfcase value="German">Hallo</cfcase> <cfcase value="Spanish">Hola</cfcase> <cfcase value="French">Bonjour</cfcase> <cfdefaultcase>Hello</cfdefaultcase></cfswitch>
Operatori decisionali e booleani
ColdFusion sfrutta le parole piuttosto che i simboli per glioperatori decisionali e booleani.
Operatore | Descrizione |
---|---|
Operatori decisionali | |
ISEQEQUAL | Ritorna true se i valori sono uguali. |
IS NOTNEQNOT EQUAL | Ritorna true se i valori non sono uguali. |
GREATER THAN GT | Ritorna true se il valore sinistroè maggiore di quello destro. |
LESS THAN LT | Ritorna true se il valore destro èmaggiore di quello sinistro. |
GREATER THAN OR EQUAL TOGTEGE | Ritorna true se il valore sinistroè maggiore o uguale a quello destro. |
LESS THAN OR EQUAL TOLTELE | Ritorna true se il valore destro èmaggiore o uguale a quello sinistro. |
CONTAINS | Ritorna true se il valore sinistro noncotiene il valore destro. |
Operatori booleani | |
NOT | Inverte il valore di un argomento. |
AND | Ritorna true se entrambi gli argomentisono true . |
OR | Ritorna true se entrambi o uno solo degliargomenti sono true . |
Short-circuiting
ColdFusion ferma la valutazione di una condizione booleananon appena è in grado di conoscere il risultato. Peresempio, quando si deve controllare se l'espressione"a AND b
" è vera, ColdFusionvaluterà solo il valore di b
nel casoa
sia true
, poiché sea
è false
alloral'intera espressione assume valore false
, aprescindere dal valore di b. Allo stesso modo, se si valutal'espressione "a OR b
" ,ColdFusion valuterà solo il valore di b
nel caso a sia false
, poiché sea
è vero allora l'intera espressioneè anch'essa true
, a prescindere dalvalore contenuto in b
. Questo comportamentoviene definito short-circuiting.
Seguono degli esempi chiarificatori.
Es.1: if.cfm
<html> <head> <title>If-Else If-Else</title> </head> <body> <cfset Age = 21> <cfif Age GTE 21> You can vote and drink! <cfelseif Age GTE 18> You can vote, but can't drink. <cfelse> You cannot vote or drink. </cfif> </body></html>
Il codice dell'esempio 1 è piuttosto semplice:è possibile vedere differenti risultati semplicementemodificando il valore della variabile Age
.
Es.2: if2.cfm
<html> <head> <title>If-Else If-Else - Compound</title> </head> <body> <cfset Age = 21> <cfset Citizen = false> <cfif Age GTE 21 AND NOT Citizen> You can drink but you can't vote! <cfelseif Age GTE 21> You can vote and drink! <cfelseif Age GTE 18 AND Citizen> You can vote but can't drink! <cfelse> You cannot vote or drink. </cfif> </body></html>
In quest'esempio viene mostrato l'uso di if compostiattraverso l'uso degli operatori booleani.
Es.3: Switch.cfm
<html> <head> <title>Switch-Case</title> </head> <body> <cfset Quantity = 1> <cfswitch expression="#Quantity#"> <cfcase value="1"> Quantity is 1 </cfcase> <cfcase value="2"> Quantity is 2 </cfcase> <cfdefaultcase> Quantity is not 1 or 2 </cfdefaultcase> </cfswitch> </body></html>
In molti linguaggi (come in Java/C++ per esempio) ènecessario un break
per terminare laprocessazione di un blocco switch
, ma questo nonè necessario in ColdFusion. Non appena vi è unmatching fra la condizione e una delle espressioni neiblocchi case, l'esecuzione termina e si esce dal bloccoswitch
.
- Articolo precedente Form HTML, le funzioni, gli operatori aritmetici
- Articolo successivo Controlli di flusso