Sammenligning (programmering)

Sammenligning i programmering  er den generelle betegnelse for en række operationer på par af værdier af samme type , eller med typestøbning , der implementerer de matematiske relationer lighed og orden . I sprog på højt niveau returnerer sådanne operationer oftest en boolsk værdi ("sand" eller "falsk").

Sammenligningen af ​​skalære (numeriske) objekter, pointere og objekter af komplekse datatyper betragtes anderledes.

Sammenligning af skalære datatyper

Når man sammenligner objekter af skalære (numeriske) datatyper, sammenlignes de lagrede numeriske værdier selv direkte. De numeriske værdier i sig selv forbliver dog uændrede.

I lavniveausprog skrives skalære objekter til processorregistre , og til sammenligning bruges der normalt en kommando , der indstiller processorflagCMP på en bestemt måde .

Sprog på højt niveau bruger logiske operatorer, der returnerer (til opkaldspunktet) en eller anden værdi, der fortolkes som en boolesk.

Logiske operatorer implementerer følgende matematiske sammenligningsoperationer:

På højniveausprog er følgende logiske operatorer implementeret:

I løst indtastede sprog er returværdien normalt et heltal, således at nul fortolkes som "falsk", og enhver anden værdi end nul fortolkes som "sand". På sprog med stærkere skrivning introduceres en særlig boolesk datatype ( engelsk  boolean ), men det er muligt at caste andre typer til boolesk.

Sammenligning af ikke-numeriske data

Selvom sammenligningsargumenterne ikke er numeriske data, kan deres sammenligning stadig implementeres, herunder som en del af programmeringssprogsstandarden. Når du arbejder med komplekse objekter, arbejder programmet med dem ved hjælp af pointere. Der er således mindst to muligheder for at sammenligne data:

Nogle sprog, der begrænser pointerhåndtering, såsom Java, mens de ikke tillader sammenligning af pointeroperander større end eller mindre end, tillader kontrol for pointer-lighed.

Indholdssammenligning, såsom strengsammenligning, er oftest indbygget i runtime-implementeringen for sproget og kan være en del af standarden. Uafhængig implementering af indholdssammenligningsregler for brugerdefinerede strukturer er dog tilladt ved at overbelaste operatører (C) eller definere (omdefinere) metoder ( Object.equalsog grænseflade Comparablei Java). For indbyggede datatyper (f.eks. String), selvom sammenligningsreglerne ofte ikke kan tilsidesættes, kan de tilpasses til det aktuelle sprog og lokalitet, og du kan også bruge dine egne implementeringer af sammenligningsreglerne med sorteringsfunktioner (grænseflade Comparatori Java) .

Nogle standarder, såsom DOM Level 3 , definerer yderligere ækvivalenstyper. Især antager DOM Level 3-standarden, at det samme element i et dokument kan repræsenteres af to eller flere områder i computerens hukommelse. Derfor er der defineret en ekstra operation isSameNode, som er en indholdslighedstest med hensyn til programmeringssproget, men som faktisk er en pointer-ækvivalenstest i forhold til DOM-standarden. [en]

På nogle sprog kan værdier, der ligner hinanden i betydning, selvom de har forskellige typer , for eksempel en tom streng , en tom matrix, tallet 0, en nul-pointer, falsk , også betragtes som ækvivalente  - de har betydningen tomhed, negation.

Noter

  1. Document Object Model Core . Hentet 11. februar 2010. Arkiveret fra originalen 11. februar 2010.