Srovnání (programování)

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ů.

Porovnání skalární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.

Porovnání nečíselných údajů

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.

Poznámky

  1. Jádro objektového modelu dokumentu . Získáno 11. února 2010. Archivováno z originálu 11. února 2010.