
Cât de des ai întâlnit operatorul de egalitate ==? Dar operatorul strict de egalitate ===? Într-un limbaj de programare, semnul egal (=) înseamnă atribuire, iar semnul dublu egal (==) are rolul de a verifica dacă există egalitatea între doi termeni. Dar ce facem cu semnul triplu egal (===)?
Înainte să trecem la o scurtă analiză a celor doi operatori, îți recomand să citești următoarele articole:
Ambele articole le-am scris pentru limbajul Java, dar au valoare intrinsecă pentru orice alt limbaj de programare.
Operatorul de egalitate == 🔗
Operatorul de egalitate == este folosit adesea în instrucțiuni condiționale, precum if și while, rareori în for.
Practic și teoretic, operatorul == returnează o valorea booleană astfel:
- dacă ambii termeni au aceeași valoare, adică sunt egali, returnează valoarea true
- dacă cei doi termeni sunt diferiți, returnează valoarea false
Hai să ne uităm la două exemple în pseudocod:
// Exemplul 1
definesc varUnu = 10;
definesc varDoi = 10;
if (varUnu == varDoi) {
afisez "Valorile sunt egale";
}
// Exemplul 2
definesc varOne = 8;
definesc varTwo = 4;
if (varOne == varTwo) {
afisez "Valorile sunt egale";
} else {
afisez "Valorile nu sunt egale";
}
În primul exemplu, e clar ce afișează, corect? Cele două variabile au aceleași valori, de același tip și totul se termină cu succes („succes” are valoarea 0 în astfel de cazuri, deci e de bine).
În al doilea exemplu, valorile variabilelor sunt diferite, iar programul afișează mesajul de la blocul de cod din else.
Hai să dau un exemplu un pic mai general ca să vezi că nu e musai ca tipul de date să fie același:
// Exemplu atipic
definesc numA = "5";
definesc numB = 5;
if (numA == numB) {
afisez "EGAL";
} else {
afisez "NEEGAL";
}
Știi ce afișează? Afișează mesajul „EGAL”. De ce? Pentru că se face conversia de tip, stringul „5” devine număr, iar condiția 5 == 5 e logic să fie adevărată.
Limbajele dinamice, cum sunt JavaScript și PHP, fac astfel de conversii atipice.
Ai putea spune că astfel de conversii sunt făcute fie pentru ca începătorii să învețe mai ușor, fie că este ceva la API-uri, unde JSON-urile vin deseori ca stringuri (șiruri de caractere) și trebuie tratate ca numere. Ambele variante sunt plauzibile.
Ca la orice problemă, există și în acest caz o soluție. Care este soluția? Operatorul strict de egalitate ===.
Operatorul strict de egalitate === 🔗
Operatorul strict de egalitate sau operatorul de egalitate strictă nu doar că verifică valorile, ci verifică și tipul valorilor.
Așadar, dacă rescriem exemplul anterior și punem operatorul ===, va rezulta mesajul „NEEGAL”. De ce? Pentru că tratăm totul cu strictețe, exact cum trebuie să lucreze un programator profesionist.
Operatorul === compară valoarea variabilelor, dar și tipul de date. Strict, dar bun, nu?
// Exemplu atipic
definesc numA = "5";
definesc numB = 5;
if (numA == numB)
{
afisez "EGAL";
} else {
afisez "NEEGAL";
}
Deci, „5” == 5 returnează valoarea true, pe când „5” === 5 returnează valoarea false.
== vs. === 🔗
Principala diferență dintre == și === este la analiza tipului de date. Operatorul === analizează și tipul de date, nu doar valoarea variabilei. Lucrurile stricte își au rostul lor! Nu-i totuna să mănânci ciocolată în fiecare zi și să-ți bați joc de tine la tinerețe. Ce faci dacă ajungi la bătrânețe? Fluieri sau cânți refrenul lui „Aoleu! Vălăleu! Au! Au! Vai! Vai!”. Trist? Încă mai poți să faci ceva dacă ești tânăr și te rogi lui Dumnezeu pentru înțelepciune. Viața este un dar și trebuie trăită cu înțelepciune (înțelepciunea e responsabilă de alegeri).
Hai să ne uităm la câteva exemple destul de interesante (pun în comentarii rezultatul afișat):
// Exemple cu == "5" == 5 // true false == 0 // true (false devine 0) null == undefined // true (regulă specială) "" == 0 // true (ambele sunt falsy - termen uzual în JavaScript) // Exemple cu === "5" === 5 // false (string vs. integer) false === 0 // false null === undefined // false "" === 0 // false 5 === 5 // true
Dacă vrei să fii sigur că nu o dai în bară, mai ales dacă scrii cod în limbajele PHP și JavaScript (două dintre favoritele mele), îți recomand să folosești operatorul strict de egalitate ===.
Să-ți las o listă cu limbaje în care se folosește operatorul ===? Hai să-ți las, iar la final pun și câteva limbaje unde nu se folosește acest operator.
Limbaje care folosesc ===:
- JavaScript
- PHP
- TypeScript
- Swift
Limbaje care nu folosesc operatorul ===:
- Java
- Python
- C, C++, C#
- Go
- Rust
Învață să fii profesionist!