Az összehasonlítás a programozásban az azonos típusú értékpárokon vagy típusöntéssel végzett műveletek sorozatának általános neve , amelyek az egyenlőség és a sorrend matematikai összefüggéseit valósítják meg . A magas szintű nyelvekben az ilyen műveletek leggyakrabban logikai értéket adnak vissza ("igaz" vagy "hamis").
A skaláris (numerikus) objektumok, mutatók és összetett adattípusú objektumok összehasonlítása másképp történik.
A skaláris (numerikus) adattípusú objektumok összehasonlításakor a tárolt numerikus értékek közvetlenül összehasonlításra kerülnek. Maguk a számértékek azonban változatlanok maradnak.
Az alacsony szintű nyelvekben a skaláris objektumok a processzorregiszterekbe íródnak , és összehasonlításukhoz általában egy parancsot használnak, CMPamely bizonyos módon beállítja a processzorjelzőket .
A magas szintű nyelvek logikai operátorokat használnak, amelyek visszaadnak (a hívópontnak) valamilyen értéket, amelyet logikai értékként értelmeznek.
A logikai operátorok a következő matematikai összehasonlító műveleteket valósítják meg:
A magas szintű nyelvekben a következő logikai operátorok kerülnek megvalósításra:
A lazán beírt nyelvekben a visszatérési érték általában egész szám, így a nullát "hamis"-nak, a nullától eltérő értéket pedig "igaznak" kell értelmezni. Az erősebb gépelést alkalmazó nyelvekben egy speciális logikai adattípust ( angol boolean ) vezetnek be, de lehetséges más típusok logikai adattípusba öntése is.
Még ha az összehasonlítási argumentumok nem is numerikus adatok, összehasonlításuk megvalósítható, beleértve a programozási nyelv szabvány részét is. Ha összetett objektumokkal dolgozik, a program mutatók segítségével működik velük. Így legalább két lehetőség van az adatok összehasonlítására:
Egyes nyelvek, amelyek korlátozzák a mutatókezelést, például a Java, miközben nem teszik lehetővé a nál nagyobb vagy kisebb mutatóoperandusok összehasonlítását, lehetővé teszik a mutatóegyenlőség ellenőrzését.
A tartalom-összehasonlítás, például a karakterlánc-összehasonlítás, leggyakrabban a nyelv futásidejű megvalósításába épül be, és része lehet a szabványnak. Az egyéni struktúrák tartalom-összehasonlítási szabályainak független megvalósítását azonban az operátorok túlterhelése (C) vagy metódusok meghatározása (újradefiniálása) teszi lehetővé ( Object.equalsés interfész ComparableJava-ban). A beépített adattípusoknál (pl. String) bár az összehasonlítási szabályokat gyakran nem lehet felülírni, de testreszabhatók az aktuális nyelvhez és területi beállításhoz, valamint az összehasonlítási szabályok saját implementációit is használhatja rendezési függvényekkel (interfész ComparatorJava nyelven). .
Egyes szabványok, mint például a DOM 3. szintje , további ekvivalenciatípusokat határoznak meg. A DOM 3. szintű szabvány különösen azt feltételezi, hogy egy dokumentum ugyanazt az elemét két vagy több régió is ábrázolhatja a számítógép memóriájában. Ezért egy további műveletet definiálunk isSameNode, amely a programozási nyelv szempontjából egy tartalom-egyenlőségi teszt, de valójában egy mutató egyenértékűségi teszt a DOM szabvány szempontjából. [egy]
Egyes nyelvekben a jelentésükben hasonló, bár különböző típusú értékeket , például üres karakterláncot , üres tömböt, 0-t, nullmutatót, false értéket is egyenértékűnek tekinthetünk – ezek jelentése: üresség, tagadás.