Način preobremenitve in privzeti parametri v Delphiju

Funkcije in postopki so pomemben del jezika Delphi. Začenši z Delphijem 4, nam Delphi omogoča delo s funkcijami in postopki, ki podpirajo privzete parametre (izdelava parametri neobvezno) in dovoljuje, da imata dve ali več rutin enako ime, vendar delujeta kot popolnoma drugačna rutine.

Poglejmo, kako vam lahko preobremenitve in privzeti parametri bolje pomagajo kodirati.

Preobremenitev

Preprosto povedano, preobremenitev označuje več kot eno rutino z istim imenom. Preobremenitev nam omogoča, da imamo več rut, ki imajo isto ime, vendar z različnim številom parametrov in vrst.

Kot primer razmislimo o naslednjih dveh funkcijah:

{Preobremenjena rutina se mora prijaviti. z direktivo o preobremenitvi}funkcijo SumAsStr (a, b: celo število): vrvica; preobremeniti; začeti Rezultat: = IntToStr (a + b); konec; funkcijo SumAsStr (a, b: razširjeno; Števke: celo število): vrvica; preobremeniti; začeti Rezultat: = FloatToStrF (a + b, ffFixed, 18, Števke); konec; 

Te deklaracije ustvarjajo dve funkciji, obe imenovani SumAsStr, ki imata različno število parametrov in sta dve različni vrsti. Ko pokličemo preobremenjeno rutino, mora biti prevajalnik sposoben povedati, katero rutino želimo poklicati.

instagram viewer

Na primer, SumAsStr (6, 3) pokliče prvo funkcijo SumAsStr, ker so njeni argumenti celo vrednosti.

Opomba: Delphi vam bo pomagal izbrati pravo izvedbo s pomočjo dokončanja kode in vpogleda v kodo.

Po drugi strani pa razmislimo, če skušamo funkcijo SumAsStr poklicati na naslednji način:

 SomeString: = SumAsStr (6.0,3.0) 

Prikaže se napaka, ki se glasi: "ni preobremenjene različice "SumAsStr", ki bi jo bilo mogoče poklicati s temi argumenti."To pomeni, da bi morali vključiti tudi parameter Števke, ki se uporablja za določanje števila števk za decimalno vejico.

Opomba: Pri pisanju preobremenjenih rutin obstaja samo eno pravilo, in to je, da se mora preobremenjena rutina razlikovati v vsaj eni vrsti parametrov. Namesto vrnitvene vrste ni mogoče razlikovati med dvema rutinama.

Dve enoti - ena rutinska

Recimo, da imamo v enoti A eno rutino in enota B uporablja enoto A, vendar razglasi rutino z istim imenom. Deklaracija v enoti B ne potrebuje direktive o preobremenitvi - za uporabo klicev v različico rutine A iz enote B bi morali uporabiti ime enote A.

Vzemite nekaj takega:

enota B;... uporablja A;... postopek RoutineName; začeti Rezultat: = A.RutineName; konec; 

Namesto uporabe preobremenjenih rutin je uporaba privzetih parametrov, kar običajno povzroči manj kode za pisanje in vzdrževanje.

Privzeti / izbirni parametri

Za poenostavitev nekaterih stavkov lahko damo privzeto vrednost parametra funkcije ali postopka in lahko pokličemo rutino s parametrom ali brez njega, zaradi česar ni izbirna. Če želite zagotoviti privzeto vrednost, zaključite deklaracijo parametra z enakim (=) simbolom, ki mu sledi stalni izraz.

Na primer glede na deklaracijo

funkcijo SumAsStr (a, b: razširjeno; Števke: celo število = 2): vrvica; 

naslednji klici funkcij so enakovredni.

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

Opomba: Parametri s privzetimi vrednostmi se morajo pojaviti na koncu seznama parametrov in morajo biti preneseni po vrednosti ali kot const. Referenčni (var) parameter ne more imeti privzete vrednosti.

Pri klicanju rutin z več kot enim privzetim parametrom ne moremo preskočiti parametrov (kot v VB):

funkcijo SkipDefParams (var A: niz; B: celo število = 5, C: boolean = napačno): boolean;... // ta klic ustvari sporočilo o napaki
CantBe: = SkipDefParams ('delphi',, True); 

Preobremenitev s privzetimi parametri

Pri uporabi funkcij ali postopkov preobremenitve in privzetih parametrov ne vnašajte dvoumnih rutinskih deklaracij.

Upoštevajte naslednje izjave:

postopek DoIt (A: podaljšano; B: celo število = 0); preobremeniti; postopek DoIt (A: podaljšano); preobremeniti; 

Poziv k DoIt postopku, kot je DoIt (5.0), se ne izvede. Zaradi privzetega parametra v prvem postopku lahko ta stavek kliče oba postopka, saj ni mogoče določiti, kateri postopek naj bi bil poklican.

instagram story viewer