Metodo perkrovos ir numatytieji parametrai „Delphi“

Funkcijos ir procedūros yra svarbi delfų kalbos dalis. Pradedant nuo Delphi 4, Delphi leidžia mums dirbti su funkcijomis ir procedūromis, palaikančiomis numatytuosius parametrus (sukuriant parametrai nebūtini) ir leidžia dviem ar daugiau įprastų pavadinimų turėti vienodą pavadinimą, tačiau veikti kaip visiškai skirtingi rutinos.

Pažiūrėkime, kaip perkrovimas ir numatytieji parametrai gali padėti geriau užkoduoti.

Perkrovos

Paprasčiau tariant, perkrovimas deklaruoja ne vieną įprastą procesą tuo pačiu pavadinimu. Perkrovimas leidžia mums turėti kelias įprastas procedūras, turinčias tą patį pavadinimą, tačiau turinčius skirtingą parametrų ir tipų skaičių.

Kaip pavyzdį panagrinėkime šias dvi funkcijas:

{Turi būti deklaruojamos perkrautos kasdienybės. su perkrovos direktyva}funkcija „SumAsStr“ (a, b: sveikasis skaičius): stygos; perkrova; prasideda Rezultatas: = IntToStr (a + b); galas; funkcija „SumAsStr“ (a, b: pratęstas; Skaičiai: sveikasis skaičius: stygos; perkrova; prasideda Rezultatas: = „FloatToStrF“ („a + b“, „ffFixed“, 18, skaitmenys); galas; 
instagram viewer

Šios deklaracijos sukuria dvi funkcijas, abi vadinamas SumAsStr, kurios naudoja skirtingą parametrų skaičių ir yra dviejų skirtingų tipų. Kai mes vadiname perkrauta rutina, sudarytojas turi mokėti pasakyti, kurią rutiną norime iškviesti.

Pavyzdžiui, „SumAsStr“ (6, 3) iškviečia pirmąją „SumAsStr“ funkciją, nes jos argumentai yra vertinami sveikuoju skaičiumi.

Pastaba: „Delphi“ padės pasirinkti teisingą įgyvendinimą, naudodamas kodo užpildymą ir įžvalgą.

Kita vertus, apsvarstykite, ar bandome skambinti „SumAsStr“ funkcija taip:

 „SomeString“: = „SumAsStr“ (6.0,3.0) 

Gausime klaidą, kurioje rašoma: „nėra perkrautos „SumAsStr“ versijos, kurią būtų galima pavadinti šiais argumentais."Tai reiškia, kad mes taip pat turėtume įtraukti parametrą Skaitmenys, naudojamą skaitmenų skaičiui po kablelio nurodyti.

Pastaba: Rašant perkrautas rutinas yra tik viena taisyklė, ty perkrauta rutina turi skirtis bent vienu parametro tipu. Grįžimo tipas negali būti naudojamas atskirti dvi rutinas.

Du vienetai - vienas įprastas

Tarkime, kad A vienete turime vieną rutiną, o B - vienetą A, bet deklaruoja rutiną tuo pačiu pavadinimu. B vieneto deklaracijai nereikia perkrovos direktyvos - turėtume naudoti A bloko pavadinimą, kad iš B bloko iškviestume į A rutinos versiją.

Apsvarstykite ką nors tokio:

vienetas B;... naudoja A;... procedūra RoutineName; prasideda Rezultatas: = A.RoutineName; galas; 

Perkrautų rutinų naudojimo alternatyva yra naudoti numatytuosius parametrus, dėl kurių paprastai mažiau rašoma ir prižiūrima kodo.

Numatytieji / pasirenkamieji parametrai

Siekdami supaprastinti kai kuriuos teiginius, galime suteikti numatytąją funkcijos ar procedūros parametro vertę, o rutiną galime iškviesti su parametru arba be jo, padarydami tai neprivalomą. Norėdami pateikti numatytąją vertę, užbaikite parametro deklaraciją lygybės (=) simboliu, po kurio eina nuolatinė išraiška.

Pavyzdžiui, atsižvelgiant į deklaraciją

funkcija „SumAsStr“ (a, b: pratęstas; Skaičiai: sveikas skaičius = 2): stygos; 

šie funkcijų skambučiai yra lygiaverčiai.

 „SumAsStr“ (6.0, 3.0) 
 „SumAsStr“ (6.0, 3.0, 2) 

Pastaba: Parametrai su numatytosiomis vertėmis turi būti rodomi parametrų sąrašo pabaigoje ir turi būti perduoti reikšme arba kaip const. Nuorodos (var) parametras negali turėti numatytosios vertės.

Kreipdamiesi į rutiną su daugiau nei vienu numatytuoju parametru, negalime praleisti parametrų (kaip ir VB):

funkcija „SkipDefParams“ (var A: styga; B: sveikas skaičius = 5, C: loginis = klaidingas): loginis;... // šis skambutis generuoja klaidos pranešimą
CantBe: = SkipDefParams ('delphi', Tiesa); 

Perkrovimas numatytaisiais parametrais

Kai naudojate funkcijų ar procedūrų perkrovą ir numatytuosius parametrus, nepristatykite dviprasmiškų įprastinių deklaracijų.

Apsvarstykite šias deklaracijas:

procedūra DARYTI (A: pratęstas; B: sveikas skaičius = 0); perkrova; procedūra Daryti (A: pratęstas); perkrova; 

Kvietimas į „DoIt“ procedūrą, kaip „DoIt“ (5.0), nekomplektuojamas. Dėl numatytojo parametro pirmosios procedūros metu šis teiginys gali vadinti abi procedūras, nes neįmanoma pasakyti, kuri procedūra turi būti vadinama.