Módszertúlterhelés és alapértelmezett paraméterek a Delphi-ben

Funkciók és eljárások a delphi nyelv fontos részét képezik. A Delphi 4 - től kezdve a Delphi lehetővé teszi számunkra, hogy olyan funkciókkal és eljárásokkal dolgozzunk, amelyek támogatják az alapértelmezett paramétereket (a paraméterek opcionálisak), és lehetővé teszi, hogy két vagy több rutin azonos névvel rendelkezzen, de teljesen különféleképpen működjön rutinok.

Lássuk, hogyan segíthetnek a túlterhelés és az alapértelmezett paraméterek a jobb kódolásban.

A túlterhelés

Egyszerűen fogalmazva: a túlterhelés több mint egy azonos nevű rutinot deklarál. A túlterhelés lehetővé teszi számunkra, hogy több rutin működjön, amelyek ugyanazzal a névvel rendelkeznek, de eltérő számú paraméterrel és típusmal rendelkeznek.

Példaként vegyük figyelembe a következő két funkciót:

{A túlterhelt rutinokat be kell jelenteni. a túlterhelési irányelvvel}funkció SumAsStr (a, b: egész szám): húr; túlterhelés; kezdődik Eredmény: = IntToStr (a + b); végén; funkció SumAsStr (a, b: kiterjesztett; Számjegyek: egész): húr; túlterhelés; kezdődik Eredmény: = FloatToStrF (a + b, ffFixed, 18, számjegy); vég; 
instagram viewer

Ezek a deklarációk két olyan funkciót hoznak létre, mindkettőt SumAsStr néven, amelyek eltérő számú paramétert vesznek igénybe és kétféle típusúak. Ha túlterhelt rutinot hívunk, akkor a fordítónak képesnek kell lennie megmondani, melyik rutinot akarjuk hívni.

Például a SumAsStr (6, 3) meghívja az első SumAsStr függvényt, mivel az argumentumainak egész értéke van.

Jegyzet: A Delphi segítséget nyújt a megfelelő megvalósítás kiválasztásában a kód kitöltése és a kód betekintése segítségével.

Másrészt fontolja meg, hogy megkíséreljük-e a következőképpen meghívni a SumAsStr függvényt:

 SomeString: = SumAsStr (6.0,3.0) 

Kapunk egy hibát, amelynek szövege: "nincs 'SumAsStr' túlterhelt változata, amelyet ezekkel az argumentumokkal lehet meghívni."Ez azt jelenti, hogy a Digit paramétert bele kell foglalnunk a számjegyek tizedes pont utáni számának meghatározásához használt számjegy paraméterbe.

Jegyzet: Csak egy szabály létezik a túlterhelt rutinok írásakor, vagyis az, hogy a túlterhelt rutinnak legalább egy paramétertípustól meg kell különböznie. A visszatérés típusa ehelyett nem használható fel a két rutin megkülönböztetésére.

Két egység - egy rutin

Tegyük fel, hogy van egy rutin az A egységben, és a B egység az A egységet használja, de deklarálja az azonos nevű rutinot. A B egység deklarációjának nincs szüksége túlterhelési irányelvre - az A egység nevét kell használnunk, hogy a rutin rutinjának A verziójára történő hívásait a B egységből minősítsük.

Vegyünk valami ilyesmit:

Mértékegység B;... felhasználások A;... eljárás RoutineName; kezdődik Eredmény: = A.RoutineName; vég; 

A túlterhelt rutinok alternatívája az alapértelmezett paraméterek használata, ami általában kevesebb kódot eredményez az íráshoz és a karbantartáshoz.

Alapértelmezett / opcionális paraméterek

Néhány állítás egyszerűsítése érdekében megadhatunk alapértelmezett értéket egy függvény vagy eljárás paraméteréhez, és meghívhatjuk a rutinot a paraméterrel vagy anélkül, opcionálissá téve azt. Alapértelmezett érték megadásához zárja le a paraméter deklarációját az egyenlő (=) szimbólummal, majd egy állandó kifejezéssel.

Például, tekintettel a nyilatkozatra

funkció SumAsStr (a, b: kiterjesztett; Számjegyek: egész szám = 2): húr; 

a következő funkcióhívások egyenértékűek.

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

Jegyzet: Az alapértelmezett értékekkel rendelkező paramétereknek a paraméterlista végén meg kell jelenniük, és értékükkel vagy const-ként át kell menniük. A referencia (var) paraméternek nem lehet alapértelmezett értéke.

Ha egynél több alapértelmezett paraméterrel ellátott rutinokat hív, nem hagyhatjuk ki a paramétereket (mint a VB-ben):

funkció SkipDefParams (var Húr; B: egész szám = 5, C: logikai = hamis): logikai;... // ez a hívás hibaüzenetet generál
CantBe: = SkipDefParams ('delphi', True); 

Túlterhelés alapértelmezett paraméterekkel

A funkció vagy az eljárás túlterhelésének és az alapértelmezett paramétereknek egyidejű használatakor ne vezessen be kétértelmű rutin deklarációkat.

Vegye figyelembe a következő nyilatkozatokat:

eljárás DoIt (A: kiterjesztett; B: egész szám = 0); túlterhelés; eljárás DoIt (A: kiterjesztett); túlterhelés; 

A DoIt eljárás hívása, mint például a DoIt (5.0), nem fordul elő. Az első eljárás alapértelmezett paramétere miatt ez az utasítás mindkét eljárást meghívhatja, mivel lehetetlen megmondani, hogy melyik eljárást kell meghívni.

instagram story viewer