Metoda preopterećenje i zadani parametri u Delfima

Funkcije i postupci važan su dio Delfi jezika. Počevši s Delphijem 4, Delphi nam omogućava rad s funkcijama i postupcima koji podržavaju zadane parametre (izradu parametri izborno) i dopušta da dvije ili više rutina imaju identičan naziv, ali djeluju kao potpuno različiti rutine.

Pogledajmo kako Preopterećenje i zadani parametri mogu vam pomoći kod boljeg kodiranja.

preopterećenje

Jednostavno rečeno, preopterećenje izjavljuje više od jedne rutine s istim nazivom. Preopterećenje nam omogućuje da imamo više rutina koje imaju isti naziv, ali s različitim brojem parametara i vrsta.

Kao primjer, razmotrimo sljedeće dvije funkcije:

{Preopterećena rutina mora biti proglašena. s direktivom o preopterećenju}funkcija SumAsStr (a, b: cijeli broj): niz; preopterećenje; početi Rezultat: = IntToStr (a + b); kraj; funkcija SumAsStr (a, b: prošireno; Brojke: cijeli broj): niz; preopterećenje; početi Rezultat: = FloatToStrF (a + b, ffFixed, 18, znamenke); kraj; 

Ove deklaracije stvaraju dvije funkcije, obje nazvane SumAsStr, koje uzimaju različit broj parametara i dvije su različite vrste. Kad nazovemo preopterećenu rutinu, prevoditelj mora biti u stanju reći koju rutinu želimo pozvati.

instagram viewer

Na primjer, SumAsStr (6, 3) poziva prvu funkciju SumAsStr, jer su njezini argumenti cjelobrojni.

Bilješka: Delphi će vam pomoći da odaberete pravu implementaciju uz pomoć dovršetka koda i uvida u kôd.

S druge strane, razmotrimo pokušajmo li nazvati SumAsStr funkciju na sljedeći način:

 SomeString: = SumAsStr (6.0,3.0) 

Primit ćemo pogrešku koja glasi: "ne postoji preopterećena verzija 'SumAsStr' koja se može nazvati ovim argumentima."To znači da treba uključiti i parametar Digits koji se koristi za određivanje broja znamenki nakon decimalne točke.

Bilješka: Za pisanje preopterećenih rutina postoji samo jedno pravilo, a to je da se preopterećena rutina mora razlikovati u najmanje jednoj vrsti parametra. Umjesto toga, tip povratka se ne može koristiti za razlikovanje dviju rutina.

Dvije jedinice - jedna rutinska

Recimo da imamo jednu rutinu u jedinici A, a jedinica B koristi jedinicu A, ali deklarira rutinu s istim nazivom. Deklaracija u jedinici B ne treba direktivu o preopterećenju - trebali bismo koristiti naziv jedinice A da bismo kvalificirali pozive na A verziju rutine iz jedinice B.

Razmislite o nečem takvom:

jedinica B;... namjene A;... postupak RoutineName; početi Rezultat: = A.RutineName; kraj; 

Alternativa korištenju preopterećenih rutina je upotreba zadanih parametara, što obično rezultira sa manje koda za pisanje i održavanje.

Zadani / neobavezni parametri

Kako bismo pojednostavili neke izjave, možemo dati zadanu vrijednost parametru funkcije ili postupka, a rutinu možemo nazvati sa ili bez parametra, čineći ga opcionalnim. Da biste osigurali zadanu vrijednost, završavajte deklaraciju parametra s simbolom jednakim (=), a slijedi stalni izraz.

Na primjer, s obzirom na deklaraciju

funkcija SumAsStr (a, b: prošireno; Brojke: cijeli broj = 2): niz; 

sljedeći pozivi funkcija su ekvivalentni.

 SumAsStr (6.0, 3.0) 
 SumAsStr (6.0, 3.0, 2) 

Bilješka: Parametri sa zadanim vrijednostima moraju se pojaviti na kraju popisa parametara i moraju ih prenijeti kao vrijednost ili kao const. Referentni (var) parametar ne može imati zadanu vrijednost.

Kada pozivamo rutine s više zadanih parametara, ne možemo preskočiti parametre (kao u VB):

funkcija SkipDefParams (var Žica; B: cijeli broj = 5, C: boolean = netočno): boolean;... // ovaj poziv generira poruku o pogrešci
CantBe: = SkipDefParams ('delphi',, istina); 

Preopterećenje zadanim parametrima

Kada koristite preopterećenje parametara funkcije i postupka i zadane parametre, nemojte uvoditi dvosmislene rutinske deklaracije.

Razmotrite sljedeće izjave:

postupak DoIt (A: produženo; B: cijeli broj = 0); preopterećenje; postupak DoIt (A: produženo); preopterećenje; 

Poziv na DoIt postupak poput DoIt (5.0), ne kompilira se. Zbog zadanog parametra u prvom postupku ova izjava može nazvati oba postupka, jer je nemoguće odrediti koji se postupak poziva.

instagram story viewer