Už ste niekedy zistili, že napíšete rovnaký kód znova a znova, aby ste v rámci neho vykonali nejakú spoločnú úlohu obsluhy udalostí? Áno! Je čas, aby ste sa dozvedeli o programoch v rámci programu. Zavolajme tieto podprogramy malých programov.
Úvod do podprogramov
Podprogramy sú dôležitou súčasťou každého programovací jazykaDelphi nie je výnimkou. V Delphi sú vo všeobecnosti dva typy podprogramov: funkcia a postup. Zvyčajný rozdiel medzi funkciou a procedúrou spočíva v tom, že funkcia môže vrátiť hodnotu a procedúra vo všeobecnosti tak neurobí. Funkcia sa bežne nazýva ako súčasť výrazu.
Pozrite sa na nasledujúce príklady:
procedúra Povedz ahoj(const sWhat:povrázok); začať
ShowMessage ('Ahoj' + sWhat); koniec; funkcie Rokov starý(const Výročie narodenia: celé číslo): celé číslo; var
Rok, Mesiac, Deň: Slovo; začať
DecodeDate (dátum, rok, mesiac, deň); Výsledok: = rok - narodenie; koniec;
Po definovaní podprogramov ich môžeme označiť raz alebo viackrát:
procedúra TForm1.Button1Click (Sender: TObject);
začať
SayHello („používateľ Delphi“); koniec; procedúra TForm1.Button2Click (Sender: TObject); začať
SayHello („Zarko Gajic“); ShowMessage („Ste“ + IntToStr (YearsOld (1973)) + „roky!“); koniec;
Funkcie a postupy
Ako vidíme, funkcie aj postupy fungujú ako mini-programy. Vo vnútri môžu mať najmä svoj vlastný typ, konštanty a variabilné vyhlásenia.
Bližší pohľad na (rôzne) funkcie SomeCalc:
funkcie SomeCalc. (const SSTR: povrázok; const iYear, iMonth: integer; var iDay: celé číslo): boolean; začať...koniec;
Každý postup alebo funkcia sa začína a hlavička ktorý identifikuje postup alebo funkciu a uvádza zoznam parametre rutinné použitia, ak existujú. Parametre sú uvedené v zátvorkách. Každý parameter má identifikačný názov a zvyčajne má typ. Stredník oddeľuje parametre v zozname parametrov jeden od druhého.
nazývajú sa sStr, iYear a iMonth konštantné parametre. Konštantné parametre nemôžu byť zmenené funkciou (alebo postupom). IDay sa odovzdáva ako parameter vara môžeme v ňom vykonať zmeny vo vnútri podprogramu.
Funkcie, pretože vracajú hodnoty, musia mať a návratový typ deklarované na konci hlavičky. Návratová hodnota funkcie je daná (konečným) priradením jej názvu. Pretože každá funkcia má implicitne lokálnu premennú Výsledok rovnakého typu ako návratová hodnota funkcií, priradenie výsledku má rovnaký účinok ako priradenie názvu funkcie.
Podrutiny určovania polohy a volania
Podrutiny sú vždy umiestnené v implementačnej časti jednotky. Takéto podprogramy môže volať (použiť) obsluha udalostí alebo podprogram v tej istej jednotke, ktorá je definovaná po nej.
Poznámka: klauzula použitia jednotky vám povie, ktorým jednotkám môže volať. Ak chceme, aby konkrétny podprogram v jednotke 1 bol použiteľný pre obsluhy udalostí alebo podprogramy v inej jednotke (povedzme Unit2), musíme:
- Pridajte Unit1 do klauzuly použitia Unit2
- Vložte kópiu záhlavia podprogramu do sekcie rozhrania Unit1.
To znamená, že podprogramy, ktorých hlavičky sú uvedené v časti rozhrania, sú globálny rozsah.
Keď nazývame funkciu (alebo postup) vo vnútri svojej vlastnej jednotky, používame jej názov s akýmkoľvek významom parametre sú potrebné. Na druhej strane, ak voláme globálny podprogram (definovaný v inej jednotke, napr. MyUnit), použijeme názov jednotky nasledovaný bodkou.
... // Vo vnútri tejto jednotky je definovaný postup SayHello
SayHello („používateľ Delphi“); // Funkcia YearsOld je definovaná vo vnútri jednotky MyUnit
Dummy: = MyUnit. YearsOld (1973);...
Poznámka: vo funkciách alebo postupoch môžu byť zabudované vlastné podprogramy. Vložený podprogram je lokálny pre podprogram kontajnera a nemôžu ho použiť iné časti programu. Niečo ako:
procedúra TForm1.Button1Click (Sender: TObject); funkcie Je malé(const SSTR:povrázok): Boolean; začať// IsSmall vráti True, ak je sStr malými písmenami, inak Falošné
Výsledok: = LowerCase (sStr) = sStr; koniec; začať// IsSmall je možné použiť iba vo vnútri udalosti Button1 OnClickak IsSmall (Edit1.Text) potom
ShowMessage („Všetky malé písmená v Edit1.Text“)
inak
ShowMessage („Nie všetky malé písmená v Edit1.Text“); koniec;