Comparație (programare)

Comparația în programare  este denumirea generală pentru o serie de operații pe perechi de valori de același tip , sau cu tip casting , care implementează relațiile matematice de egalitate și ordine . În limbajele de nivel înalt, astfel de operațiuni returnează cel mai adesea o valoare booleană („adevărat” sau „fals”).

Comparația de obiecte scalare (numerice), pointeri și obiecte de tipuri de date complexe este considerată diferit.

Comparația tipurilor de date scalare

Când se compară obiecte cu tipuri de date scalare (numerice), valorile numerice stocate sunt comparate direct. Valorile numerice însele rămân însă neschimbate.

În limbajele de nivel scăzut, obiectele scalare sunt scrise în registrele procesorului și, pentru compararea lor, se folosește de obicei o comandă care setează steagurileCMP procesorului într-un anumit mod .

Limbile de nivel înalt folosesc operatori logici care returnează (la punctul de apel) o valoare care este interpretată ca boolean.

Operatorii logici implementează următoarele operații de comparare matematică:

În limbajele de nivel înalt, respectiv, sunt implementați următorii operatori logici:

În limbile cu tastare vag, valoarea returnată este de obicei un număr întreg, astfel încât zero este interpretat ca „fals” și orice valoare, alta decât zero, este interpretată ca „adevărat”. În limbile cu tastare mai puternică, este introdus un tip de date boolean special ( boolean englez  ), dar este posibil să aruncați alte tipuri în boolean.

Comparația datelor nenumerice

Chiar dacă argumentele de comparație nu sunt date numerice, comparația lor poate fi implementată, inclusiv ca parte a standardului limbajului de programare. Când lucrați cu obiecte complexe, programul operează cu ele folosind pointeri. Astfel, există cel puțin două opțiuni pentru compararea datelor:

Unele limbi care limitează manipularea pointerului, cum ar fi Java, deși nu permit compararea operanzilor pointerului mai mari sau mai mici decât, permit verificarea egalității pointerului.

Compararea conținutului, cum ar fi compararea șirurilor, este cel mai adesea încorporată în implementarea timpului de execuție pentru limbaj și poate face parte din standard. Cu toate acestea, implementarea independentă a regulilor de comparare a conținutului pentru structurile personalizate este permisă prin supraîncărcarea operatorilor (C) sau definirea (redefinirea) metodelor ( Object.equalsși interfața Comparableîn Java). Pentru tipurile de date încorporate (de ex. String), deși adesea regulile de comparație nu pot fi suprascrise, ele pot fi personalizate pentru limba și localitatea curentă și, de asemenea, puteți utiliza propriile implementări ale regulilor de comparare cu funcții de sortare (interfață Comparatorîn Java) .

Unele standarde, cum ar fi DOM Level 3 , definesc tipuri de echivalență suplimentare. În special, standardul DOM Level 3 presupune că același element al unui document poate fi reprezentat de două sau mai multe regiuni în memoria computerului. Prin urmare, este definită o operație suplimentară isSameNode, care este un test de egalitate de conținut în ceea ce privește limbajul de programare, dar este de fapt un test de echivalență pointer în ceea ce privește standardul DOM. [unu]

În unele limbi, valorile care au semnificație similară, deși au tipuri diferite , de exemplu, un șir gol , o matrice goală, numărul 0, un pointer nul, fals , pot fi, de asemenea, considerate echivalente  - au semnificația de vid, negație.

Note

  1. Document Object Model Core . Consultat la 11 februarie 2010. Arhivat din original pe 11 februarie 2010.