Ce este supraîncărcarea operatorului?

Supraîncărcarea operatorului este o caracteristică a limbajului de programare a computerului care permite unui programator să înlocuiască un operator implicit. Când funcția de operator este supraîncărcată, aceasta poate fi declarată cu argumente personalizate care sunt tipuri de date diferite decât ceea ce operatorul era capabil să gestioneze implicit. Noii parametri pot fi de tip primitiv sau definit de utilizator. În corpul funcției de suprascriere, un programator poate manipula valorile parametrilor după cum dorește. Folosind supraîncărcarea operatorului, un programator poate crea comenzi rapide intuitive pentru manipularea tipurilor de date definite de utilizator sau poate modifica modul în care sunt gestionate tipurile de date implicite.

Când sunt create tipuri de date definite de utilizator, nu există nicio modalitate de a face sarcini operaționale simple, cum ar fi adăugarea a două dintre ele împreună sau incrementarea datelor interne prin utilizarea operatorului de increment unar cu tipul de date. Operatorii, inclusiv simbolul de adăugare, pot fi suprascriși, astfel încât, dacă sunt utilizați ca operatori binari între două tipuri de date personalizate, ei returnează un rezultat definit de utilizator. În același mod, un operator unar, precum operatorul de incrementare, ar putea fi suprascris pentru a crește o valoare internă în tipul definit de utilizator.

Odată ce un operator este supraîncărcat, compilatorul trebuie să ia o decizie cu privire la ce să facă când întâlnește un operator supraîncărcat. Compilatorul decide acțiunea adecvată pe care trebuie să o întreprindă pe baza tipurilor de date utilizate ca operanzi sau împreună cu operatorul. Dacă operanzii, care sunt valori ale parametrilor pentru funcția operator, sunt tipuri de date definite de utilizator, compilatorul va alege funcția supraîncărcată care are parametri care se potrivesc cu operanzii utilizați.

Limbajul computerelor variază în ceea ce privește modul în care permit acest tip de polimorfism ad-hoc. Diferite limbi pot permite crearea de noi operatori personalizați, supraîncărcarea tuturor sau a unora dintre operatorii săi sau poate să nu permită deloc supraîncărcarea operatorilor. C++, C#, PHP și Perl permit ca unii dintre operatori să fie supraîncărcați. Supraîncărcarea operatorului nu este permisă în C, Java și Javascript.

Atât supraîncărcarea operatorului, cât și supraîncărcarea funcțiilor în general, au făcut obiectul unor dezbateri. Unii susțin că oferirea programatorului libertatea de a schimba modul în care se comportă un operator ar putea introduce potențialul de a crea erori neintenționate de către alți programatori care folosesc codul personalizat. Punctul de vedere opus propune că permiterea supraîncărcării operatorului oferă programatorilor capacitatea de a crea cod intuitiv și concis, care va fi mai ușor de înțeles, va costa mai puțin de produs și va reduce erorile.