Mis on funktsioonide ülekoormamine?

Funktsioonide ülekoormamine on paljude programmeerimiskeelte funktsioon, kus saab luua mitu meetodit sama nimega, kuid erinevate sisendparameetrite või tagastustüüpidega. See on objektorienteeritud programmeerimise tavaline omadus; eelkõige konstruktoritel võib olla mitu erinevat ülekoormatud varianti. Põhimõtteliselt on funktsioonide ülekoormamine kasulik, kui kaks funktsiooni teevad väga sarnaseid asju ja selleks võib kuluda mitut tüüpi sisendit. Konstruktoreid saab kergesti üle koormata, kuna neil pole selgesõnalist tagastustüüpi määratud, nii et lihtsalt konstruktori sisendparameetrite muutmine oleks kehtiv ülekoormus.

Esimene võimalus funktsiooni ülekoormamiseks on selle sisendparameetrite muutmine. Näiteks võib kaaluda funktsiooni nimega “add”, mis võtab sisendiks kaks täisarvu. Selle funktsiooni eesmärk on üsna ilmne; see on mõeldud kahe täisarvu summa leidmiseks.

Kui aga soovitakse leida kahe ujuki ehk kümnendarvu summat, poleks see funktsioon rakendatav. Seega oleks vaja teist ülekoormatud funktsiooni, mis on defineeritud kui funktsioon nimega “add”, mis võtab sisendiks kaks ujuki. Funktsioonid teevad sisuliselt sama asja, kuid funktsioonide ülekoormamine on vajalik, kuna nende sisendid on oluliselt erinevad.

Teine võimalus funktsiooni ülekoormamiseks on muuta nii selle sisendparameetreid kui ka tagastustüüpi. Eelmist näidet kasutades võib kaaluda, kas mõlemal ülekoormatud “lisa” funktsioonil on tühine tagastustüüp; see tähendab, et nad ei tagastanud midagi. See oleks endiselt kehtiv funktsioonide ülekoormus, kuid kahe meetodi tagastustüüpe saab ka muuta. Teisel kehtival ülekoormuse korral võib funktsioon “lisa”, mis võtab kaks täisarvu, tagastada selle täisarvu ja funktsioon “lisa”, mis võtab kaks kümnendarvu, võib tagastada selle kümnendarvu summa.

Funktsiooni tagastustüübi lihtsalt muutmist ei peeta aga kehtivaks funktsiooni ülekoormamiseks. Ainult funktsiooni tagastustüübi muutmine põhjustab ebaselgust, kuna meetodi allkirjast ei selgu, millist tagastustüüpi soovitakse. Parameetreid saab määratleda ka mitmetähenduslikult, mistõttu on väga oluline, et ülekoormatud funktsioonid saaksid õigesti kutsutud. Näiteks kui ühel on ülekoormatud funktsioon, mille sisendparameetriks on täisarv, ja teisel, mille parameetriks on kümnendnumber, on väga lihtne, et keegi kutsuks kogemata täisarvu funktsiooni asemel kümnendarvu funktsiooni. või vastupidi, kuna neil on sama nimi. Selliseid mitmetähenduslikke parameetreid tuleks võimalusel vältida ja kui neid ei saa, tuleks olla väga ettevaatlik, et tagada õige ülekoormatud funktsioon õigel ajal.

Funktsioonide ülekoormamine on kasulik erinevate sisestustüüpidega seotud funktsioonide loomiseks ja annab koodile palju paindlikkust. Üks viimane kaalutlus ülekoormatud funktsioonide puhul on see, et piisav kommenteerimine on hädavajalik. Kuigi erinevate sisendparameetrite põhjal võib olla selge, milline ülekoormatud funktsiooni versioon on konkreetses olukorras õige, ei pruugi alati olla selge, mida funktsioon teeb teisiti kui teised ülekoormatud partnerid.