As vrea sa vorbim in acest articol, despre operatorul de egalitate din ColdFusion. Fiind mai degraba un meta-limbaj, ColdFusion a implementat unele lucruri putin diferit fata de alte limbaje web cu care ne-am obisnuit.
Este si cazul operatorului egal. Acesta arata total diferit in contextul de comparare fata de cel de asignare. Derutant? Da, stiu, e mai greu de exprimat in cuvinte. Hai sa vedem niste exemple ca sa intelegem mai bine despre ce este vorba.
In PHP, asignarea se face cu un singur egal, iar compararea sa face cu 2 (==) sau 3 (===) egal, dupa caz. Un exemplu simplu ar arata asa:
<?php $value = 2; // asignare if($value == 2) // comparare { echo "Valoarea este doi"; } else { echo "Valoarea este diferita de doi"; } ?>
In ColdFusion insa, operatorii arata altfel. Sa vedem cum arata codul:
<cfset value = 2 /> <!--- asignare ---> <cfif value eq 2> <!--- comparare ---> <cfoutput>Valoarea este doi</cfoutput> <cfelse> <cfoutput>Valoarea este diferita de doi</cfoutput> </cfif>
Dupa cum observati, ColdFusion evita folosirea lui dublu si triplu egal. Nu stiu daca este din dorinta de a evita confuzia, sau vreo mostenire din Java (?), dar pentru comparare ColdFusion foloseste operatorul eq
.
Pe de alta parte, mai exista o logica in spatele acestei alegeri. Trebuie sa tinem minte ca avem de-a face cu un limbaj de programare pe baza de tag-uri. Mai mult, trebuie sa tinem cont ca “egal” nu este singurul operator de comparare. Mai exista “mai mare”, “mai mic” etc.
Avand in vedere acest lucru, sa ne gandim ce-ar insemna folosirea acestor operatori in forma clasica. Codul ar arata asa:
<cfif value > 2> <cfoutput>Valoarea este mai mare decat doi</cfoutput> <cfelse> <cfoutput>Valoarea nu este mai mare decat doi</cfoutput> </cfif> <cfif value < 2> <cfoutput>Valoarea este mai mica decat doi</cfoutput> <cfelse> <cfoutput>Valoarea nu este mai mica decat doi</cfoutput> </cfif>
Se poate vedea foarte clar ca acest cod nu va functiona niciodata. Nu poti avea <
sau >
in interiorul unui tag care se bazeaza pe aceste caractere rezervate pentru a construi structura codului. Asa ca cei doi vor trebui inlocuiti astfel:
<cfif value gt 2> <cfoutput>Valoarea este mai mare decat doi</cfoutput> <cfelse> <cfoutput>Valoarea nu este mai mare decat doi</cfoutput> </cfif> <cfif value lt 2> <cfoutput>Valoarea este mai mica decat doi</cfoutput> <cfelse> <cfoutput>Valoarea nu este mai mica decat doi</cfoutput> </cfif>
Si daca am inlocuit <
si >
cu lt
si gt
, ar fi aberant sa facem nota discordanta la =
. Nimic nu e mai rau decat un limbaj de programare inconsecvent. Prin urmare <
devine lt
, >
devine gt
, iar =
devine eq
.
Aceasta a fost mica noastra incursiune in operatorii din ColdFusion. Voi reveni cu alte articole despre lucruri pe care ColdFusion le trateaza putin diferit de alte limbaje.