Porovnání v programování je obecný název pro sérii operací na párech hodnot stejného typu nebo s přetypováním , které implementují matematické vztahy rovnosti a řádu . V jazycích na vysoké úrovni tyto operace nejčastěji vracejí booleovskou hodnotu ("true" nebo "false").
Rozdílně se posuzuje srovnání skalárních (numerických) objektů, ukazatelů a objektů komplexních datových typů.
Při porovnávání objektů skalárních (numerických) datových typů se přímo porovnávají samotné uložené číselné hodnoty. Samotné číselné hodnoty však zůstávají nezměněny.
V nízkoúrovňových jazycích se skalární objekty zapisují do registrů procesoru a pro jejich porovnání se obvykle používá příkaz , který CMPurčitým způsobem nastavuje příznaky procesoru .
Jazyky na vysoké úrovni používají logické operátory, které vracejí (k bodu volání) nějakou hodnotu, která je interpretována jako booleovská hodnota.
Logické operátory implementují následující matematické porovnávací operace:
V jazycích vyšší úrovně jsou implementovány následující logické operátory:
Ve volně napsaných jazycích je návratová hodnota obvykle celé číslo, takže nula je interpretována jako „nepravda“ a jakákoli jiná hodnota než nula je interpretována jako „pravda“. V jazycích se silnějším psaním je zaveden speciální datový typ boolean ( anglicky boolean ), ale je možné přetypovat i jiné typy na boolean.
I když argumenty porovnání nejsou číselná data, jejich porovnání lze přesto implementovat, a to i jako součást standardu programovacího jazyka. Při práci se složitými objekty s nimi program operuje pomocí ukazatelů. Existují tedy alespoň dvě možnosti porovnání dat:
Některé jazyky, které omezují manipulaci s ukazateli, jako je Java, a přitom neumožňují porovnání operandů ukazatelů větších nebo menších než, umožňují kontrolu rovnosti ukazatelů.
Porovnání obsahu, jako je porovnání řetězců, je nejčastěji zabudováno do implementace běhového prostředí pro daný jazyk a může být součástí standardu. Nezávislá implementace pravidel pro porovnávání obsahu pro vlastní struktury je však umožněna přetížením operátorů (C) nebo definováním (redefinováním) metod ( Object.equalsa rozhraní Comparablev Javě). U vestavěných datových typů (např. String), ačkoli často pravidla porovnání nelze přepsat, lze je přizpůsobit pro aktuální jazyk a národní prostředí a můžete také použít své vlastní implementace pravidel porovnání s funkcemi řazení (rozhraní Comparatorv jazyce Java) .
Některé standardy, jako je DOM Level 3 , definují další typy ekvivalence. Zejména standard DOM Level 3 předpokládá, že stejný prvek dokumentu může být reprezentován dvěma nebo více oblastmi v paměti počítače. Proto je definována další operace isSameNode, která je testem obsahové rovnosti z hlediska programovacího jazyka, ale ve skutečnosti je testem ekvivalence ukazatelů z hlediska standardu DOM. [jeden]
V některých jazycích lze hodnoty, které mají podobný význam, i když mají různé typy , například prázdný řetězec , prázdné pole, číslo 0, nulový ukazatel, false , považovat za ekvivalentní - mají význam prázdnota, negace.