Metoda Přetížení a výchozí parametry v Delphi

Funkce a postupy jsou důležitou součástí jazyka Delphi. Počínaje Delphi 4, Delphi nám umožňuje pracovat s funkcemi a procedurami, které podporují výchozí parametry (takže parametry nepovinné) a umožňuje dvěma nebo více rutinám mít stejný název, ale fungovat jako zcela odlišné rutiny.

Podívejme se, jak vám přetížení a výchozí parametry mohou pomoci lépe kódovat.

Přetížení

Jednoduše řečeno, přetížení deklaruje více než jednu rutinu se stejným názvem. Přetížení nám umožňuje mít více rutin, které sdílejí stejný název, ale s jiným počtem parametrů a typů.

Jako příklad uveďme následující dvě funkce:

{Přetížené rutiny musí být deklarovány. se směrnicí o přetížení}funkce SumAsStr (a, b: celé číslo): tětiva; přetížení; začít Výsledek: = IntToStr (a + b); konec; funkce SumAsStr (a, b: rozšířené; Číslice: celé číslo): tětiva; přetížení; začít Výsledek: = FloatToStrF (a + b, ffFixed, 18, číslice); konec; 

Tato prohlášení vytvářejí dvě funkce, obě nazývané SumAsStr, které mají různý počet parametrů a jsou dvou různých typů. Když voláme přetíženou rutinu, musí kompilátor vědět, na kterou rutinu chceme volat.

instagram viewer

Například SumAsStr (6, 3) volá první funkci SumAsStr, protože její argumenty jsou celočíselné.

Poznámka: Delphi vám pomůže vybrat správnou implementaci pomocí dokončení kódu a nahlédnutí do kódu.

Na druhou stranu zvažte, zda se pokusíme zavolat funkci SumAsStr takto:

 SomeString: = SumAsStr (6.0,3.0) 

Dostaneme chybu, která zní: "neexistuje žádná přetížená verze 'SumAsStr', kterou lze vyvolat pomocí těchto argumentů."To znamená, že bychom měli také zahrnout parametr Číslice používaný k určení počtu číslic za desetinnou čárkou."

Poznámka: Při psaní přetížených rutin existuje pouze jedno pravidlo, a to, že přetížená rutina se musí lišit alespoň v jednom typu parametru. Typ návratu místo toho nelze použít k rozlišení mezi dvěma rutinami.

Dvě jednotky - jedna rutina

Řekněme, že máme jednu rutinu v jednotce A a jednotka B používá jednotku A, ale deklaruje rutinu se stejným názvem. Prohlášení v jednotce B nevyžaduje směrnici o přetížení - měli bychom použít název jednotky A pro kvalifikování volání do verze rutiny A z jednotky B.

Zvažte něco takového:

jednotka B;... použití A;... postup Název rutiny; začít Výsledek: = A.RoutineName; konec; 

Alternativou k použití přetížených rutin je použití výchozích parametrů, jejichž výsledkem je obvykle méně kódu pro zápis a údržbu.

Výchozí / volitelné parametry

Abychom zjednodušili některé příkazy, můžeme dát výchozí hodnotu parametru funkce nebo procedury a můžeme zavolat rutinu s parametrem nebo bez něj, což je volitelné. Chcete-li poskytnout výchozí hodnotu, ukončete deklaraci parametrů symbolem rovnosti (=) následovaným konstantním výrazem.

Například vzhledem k prohlášení

funkce SumAsStr (a, b: rozšířené; Číslice: celé číslo = 2): tětiva; 

Následující volání funkcí jsou ekvivalentní.

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

Poznámka: Parametry s výchozími hodnotami se musí vyskytnout na konci seznamu parametrů a musí být předány hodnotou nebo jako const. Parametr reference (var) nemůže mít výchozí hodnotu.

Při volání rutin s více než jedním výchozím parametrem nemůžeme přeskočit parametry (jako ve VB):

funkce SkipDefParams (var Řetězec; B: celé číslo = 5, C: boolean = False): boolean;... // toto volání generuje chybovou zprávu
CantBe: = SkipDefParams ('delphi',, True); 

Přetížení výchozími parametry

Při použití funkce nebo přetížení procedury a výchozích parametrů nezavádějte nejednoznačné rutinní deklarace.

Zvažte následující prohlášení:

postup DoIt (A: rozšířené; B: celé číslo = 0); přetížení; postup DoIt (A: rozšířeno); přetížení; 

Volání doIt procedury jako DoIt (5.0), není kompilovat. Z důvodu výchozího parametru v první proceduře může tento příkaz volat obě procedury, protože není možné určit, která procedura má být volána.