Christian Castelli
a- a+

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 bnel 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.



Ti potrebbe interessare anche

commenta la notizia