Funkcie a postupy sú dôležitou súčasťou jazyka Delphi. Počnúc Delphi 4, Delphi nám umožňuje pracovať s funkciami a postupmi, ktoré podporujú predvolené parametre (takže parametre nepovinné) a umožňuje, aby dve alebo viac rutín malo rovnaké meno, ale fungovalo úplne inak rutiny.
Pozrime sa, ako vám preťaženie a predvolené parametre môžu pomôcť zlepšiť kód.
preťaženie
Jednoducho povedané, preťaženie deklaruje viac ako jednu rutinu s rovnakým názvom. Preťaženie nám umožňuje mať viac rutín, ktoré zdieľajú rovnaké meno, ale s odlišným počtom parametrov a typov.
Ako príklad uvážme nasledujúce dve funkcie:
{Preťažené rutiny musia byť deklarované. so smernicou o preťažení}funkcie SumAsStr (a, b: celé číslo): povrázok; preťaženie; začať Výsledok: = IntToStr (a + b); koniec; funkcie SumAsStr (a, b: rozšírené; Číslice: celé číslo): povrázok; preťaženie; začať Výsledok: = FloatToStrF (a + b, ffFixed, 18, číslice); koniec;
Tieto vyhlásenia vytvárajú dve funkcie, ktoré sa nazývajú SumAsStr, ktoré majú iný počet parametrov a sú dvoch rôznych typov. Keď zavoláme preťaženú rutinu, kompilátor musí byť schopný zistiť, ktorú rutinu chceme zavolať.
Napríklad SumAsStr (6, 3) volá prvú funkciu SumAsStr, pretože jej argumenty sú celočíselné.
Poznámka: Delphi vám pomôže vybrať správnu implementáciu pomocou dokončenia kódu a prehľadu kódu.
Na druhej strane zvážte, či sa pokúsime volať funkciu SumAsStr takto:
SomeString: = SumAsStr (6.0,3.0)
Dostaneme chybu, ktorá znie: “neexistuje žiadna preťažená verzia 'SumAsStr', ktorú by bolo možné vyvolať týmito argumentmi.„To znamená, že by sme mali zahrnúť aj parameter Číslice, ktorý sa používa na určenie počtu číslic za desatinnou čiarkou.
Poznámka: Pri zápise preťažených rutín existuje iba jedno pravidlo, a to, že preťažená rutina sa musí líšiť aspoň v jednom type parametra. Namiesto toho nie je možné použiť typ návratu na rozlíšenie medzi dvoma rutinami.
Dve jednotky - jedna rutina
Povedzme, že máme jednu rutinu v jednotke A a jednotka B používa jednotku A, ale deklaruje rutinu s rovnakým názvom. Vyhlásenie v jednotke B nevyžaduje smernicu o preťažení - názov jednotky A by sme mali použiť na kvalifikovanie volaní na verziu rutiny A z jednotky B.
Zvážte niečo také:
jednotka B,... použitie A;... procedúra RoutineName; začať Výsledok: = A.RoutineName; koniec;
Alternatívou k použitiu preťažených rutín je použitie predvolených parametrov, ktoré zvyčajne vedú k menšiemu počtu kódov na zápis a údržbu.
Predvolené / voliteľné parametre
Aby sme zjednodušili niektoré príkazy, môžeme pre parameter funkcie alebo procedúry poskytnúť predvolenú hodnotu a môžeme rutinu zavolať s parametrom alebo bez neho, čím sa stane voliteľným. Ak chcete poskytnúť predvolenú hodnotu, ukončite deklaráciu parametra symbolom rovnosti (=), za ktorým nasleduje konštantný výraz.
Napríklad vzhľadom na vyhlásenie
funkcie SumAsStr (a, b: rozšírené; Číslice: celé číslo = 2): povrázok;
nasledujúce volania funkcií sú rovnocenné.
SumAsStr (6.0, 3.0)
SumAsStr (6.0, 3.0, 2)
Poznámka: Parametre s predvolenými hodnotami sa musia vyskytovať na konci zoznamu parametrov a musia sa odovzdávať podľa hodnoty alebo ako konšt. Parameter referencie (var) nemôže mať predvolenú hodnotu.
Pri volaní rutín s viac ako jedným predvoleným parametrom nemôžeme preskočiť parametre (ako vo VB):
funkcie SkipDefParams (var A: string; B: celé číslo = 5, C: boolean = False): boolean;... // toto volanie vygeneruje chybovú správu
CantBe: = SkipDefParams ('delphi',, True);
Preťaženie predvolenými parametrami
Ak používate funkciu alebo preťaženie procedúry a predvolené parametre, nezavádzajte nejednoznačné bežné vyhlásenia.
Zvážte nasledujúce vyhlásenia:
procedúra DOIt (A: predĺžený; B: celé číslo = 0); preťaženie; procedúra DOIt (A: rozšírené); preťaženie;
Volanie procedúry DoIt ako DoIt (5.0) sa nekompiluje. Z dôvodu predvoleného parametra v prvej procedúre by toto vyhlásenie mohlo volať obidve procedúry, pretože nie je možné určiť, ktorá procedúra sa má volať.