Jämförelse (programmering)

Jämförelse i programmering  är det allmänna namnet för en serie operationer på par av värden av samma typ , eller med typgjutning , som implementerar de matematiska relationerna jämlikhet och ordning . På högnivåspråk returnerar sådana operationer oftast ett booleskt värde ("true" eller "false").

Jämförelsen av skalära (numeriska) objekt, pekare och objekt av komplexa datatyper betraktas på olika sätt.

Jämförelse av skalära datatyper

När man jämför objekt av skalära (numeriska) datatyper jämförs de lagrade numeriska värdena själva direkt. De numeriska värdena i sig förblir dock oförändrade.

På lågnivåspråk skrivs skalära objekt till processorregister och för jämförelse används vanligtvis ett kommando som ställer in processorflaggornaCMP på ett visst sätt .

Språk på hög nivå använder logiska operatorer som returnerar (till anropspunkten) något värde som tolkas som ett booleskt.

Logiska operatorer implementerar följande matematiska jämförelseoperationer:

På högnivåspråk är följande logiska operatorer implementerade:

I löst skrivna språk är returvärdet vanligtvis ett heltal, så att noll tolkas som "falskt" och alla andra värden än noll tolkas som "sant". På språk med starkare skrivning introduceras en speciell boolesk datatyp ( engelska  boolean ), men det är möjligt att casta andra typer till booleska.

Jämförelse av icke-numeriska data

Även om jämförelseargumenten inte är numeriska data, kan deras jämförelse fortfarande implementeras, inklusive som en del av programmeringsspråksstandarden. När du arbetar med komplexa objekt arbetar programmet med dem med hjälp av pekare. Det finns alltså minst två alternativ för att jämföra data:

Vissa språk som begränsar pekarhanteringen, som Java, tillåter inte jämförelse av pekaroperander större än eller mindre än, men tillåter kontroll av pekarlikhet.

Innehållsjämförelse, som strängjämförelse, är oftast inbyggd i körtidsimplementeringen för språket och kan vara en del av standarden. Oberoende implementering av regler för innehållsjämförelse för anpassade strukturer tillåts dock genom att överbelasta operatörer (C) eller definiera (omdefiniera) metoder ( Object.equalsoch gränssnitt Comparablei Java). För inbyggda datatyper (t.ex. String), även om jämförelsereglerna ofta inte kan åsidosättas, kan de anpassas för det aktuella språket och lokalen, och du kan även använda dina egna implementeringar av jämförelsereglerna med sorteringsfunktioner (gränssnitt Comparatori Java) .

Vissa standarder, såsom DOM Level 3 , definierar ytterligare ekvivalenstyper. I synnerhet antar DOM Level 3-standarden att samma element i ett dokument kan representeras av två eller flera regioner i datorns minne. Därför definieras ytterligare en operation isSameNode, som är ett innehållslikvärdighetstest vad gäller programmeringsspråket, men som faktiskt är ett pekareekvivalenstest i termer av DOM-standarden. [ett]

På vissa språk kan värden som är lika i betydelse, även om de har olika typer , till exempel en tom sträng , en tom array, siffran 0, en nollpekare, false , också betraktas som likvärdiga  - de har betydelsen av tomhet, negation.

Anteckningar

  1. Document Object Model Core . Hämtad 11 februari 2010. Arkiverad från originalet 11 februari 2010.