Definiția operator

Reacoperirea este o caracteristică oferită de unele limbaje de programare , care permite utilizarea operatorilor (cum ar fi +, = sau ==) ca funcții sau metode, definindu - le la noi tipuri de date. Operatorii nu sunt neapărat simboluri. Uneori este permisă definirea noilor operatori. Acesta este de obicei zahăr sintactic și poate fi ușor emulat prin apeluri de funcții sau metode:

Când operatorii sunt funcții, în general vorbim de supraîncărcare a operatorului, deoarece implementarea este aleasă în funcție de tipul de operanzi (vorbim și de polimorfism ad hoc). Acesta este în special cazul în C ++ .

Nu toate limbile care permit definirea operatorului permit supraîncărcarea. Python , de exemplu, nu acceptă supraîncărcarea, dar vă permite să definiți operatorii prin metode speciale.

În cazul în care operatorii pot fi numiți implicit, aceștia devin mai utili decât estetici. Acesta este cazul cu operatorul to_sde Ruby , care returnează o reprezentare șir de caractere a unui obiect și cu operatorii de PostgreSQL , pe care pot fi definite transformări matematice. PostgreSQL poate utiliza, de asemenea, multe optimizări pentru expresiile care utilizează acești operatori.

utilizare

Definiția operatorilor permite în special o scriere a codului mai aproape de scrierea matematică. Atunci când definiția operatorilor este utilizată respectând convențiile atașate operatorului, aceasta poate ajuta cititorul unui program.

De exemplu, putem defini operatorul *pentru a efectua multiplicarea matricii sau defini operatorul +pentru a adăuga două numere complexe.

// Exemple avec des matrices // ... les variables a et b sont initialisées et sont 2 matrices Matrice c = a * b; // Exemple avec des complexes Complexe i (0, 1); Complexe un (1, 0); Complexe r = i + un;

Critic

Suprasolicitarea și redefinirea operatorilor au fost criticate deoarece pot surprinde cititorul unui program, permițând programatorului să ofere aceluiași operator funcționalități subtile diferite în funcție de tipurile de operanzi ai acestora. Un exemplu tipic (rău) de redefinire a operatorului este utilizarea în C ++ a operatorului de compensare binară << : expresia

a << 1

va returna dubla valoarea unei (fără modificări) dacă este o variabilă întreagă, dar dacă un este un flux de ieșire, atunci va scadea „1“ în ea (și , prin urmare, să modifice).

Un alt exemplu este greșeala obișnuită de a redefini un operator matematic (cum ar fi +, operatorul de adăugare) care nu își modifică operandul din stânga, cu o funcție care îl modifică (confuzie cu operatorul +=).

Această critică poate fi extinsă la limbaje orientate pe obiecte (ale modelului obiect cu clase ): redefinirea unei metode permite programatorului să-și modifice semantica; nu se aplică nicio dovadă formală pentru a evita această problemă .

Catalog