Christian Castelli
a- a+

Blocchi If-Else, switch, operatori decisionali e booleani, short-circuiting

CONTROLLI DI FLUSSO

I processi condizionali permettono ai programmatori di produrre in output codice differente basandosi su condizioni specifiche. 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> è quella mostrata 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>, ad eccezione del fatto che si può effettuare un controllo di uguaglianza per una sola singola espressione. Non può 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 gli operatori decisionali e booleani.

Operatore

Descrizione

Operatori decisionali

                IS
EQ
EQUAL
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 non cotiene il valore destro.

Operatori booleani

                NOT
Inverte il valore di un argomento.
                AND
Ritorna true se entrambi gli argomenti sono true.
                OR
Ritorna true se entrambi o uno solo degli argomenti sono true.


Short-circuiting

ColdFusion ferma la valutazione di una condizione booleana non appena è in grado di conoscere il risultato. Per esempio, quando si deve controllare se l'espressione "a AND b" è vera, ColdFusion valuterà solo il valore di b nel caso a sia true, poiché se a è false allora l'intera espressione assume valore false, a prescindere dal valore di b. Allo stesso modo, se si valuta l'espressione "a OR b" , ColdFusion valuterà solo il valore di b nel caso a sia false, poiché se a è vero allora l'intera espressione è anch'essa true, a prescindere dal valore contenuto in b. Questo comportamento viene 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 semplicemente modificando 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 composti attraverso 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 la processazione di un blocco switch, ma questo non è necessario in ColdFusion. Non appena vi è un matching fra la condizione e una delle espressioni nei blocchi case, l'esecuzione termina e si esce dal blocco switch.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Marcello
Ti è piaciuto l'articolo?