Už jste někdy zjistili, že píšete stejný kód znovu a znovu, abyste v něm vykonávali nějaký společný úkol obsluhy událostí? Ano! Je čas, abyste se dozvěděli o programech v rámci programu. Říkejme těmto podprogramům mini-programů.
Úvod do podprogramů
Podprogramy jsou důležitou součástí každého programovací jazyk, aDelphi není výjimkou. V Delphi jsou obecně dva typy podprogramů: funkce a procedura. Obvyklý rozdíl mezi funkcí a procedurou spočívá v tom, že funkce může vrátit hodnotu a procedura to obecně neudělá. Funkce se obvykle nazývá jako součást výrazu.
Podívejte se na následující příklady:
postup Řekni Ahoj(konst sWhat:tětiva); začít
ShowMessage ('Hello' + sWhat); konec; funkce YearsOld (konst BirthYear: integer): integer; var
Rok, Měsíc, Den: Slovo; začít
DecodeDate (datum, rok, měsíc, den); Výsledek: = Year - BirthYear; konec;
Po definování podprogramů je můžeme jednou nebo vícekrát nazvat:
postup TForm1.Button1Click (Sender: TObject); začít
SayHello („uživatel Delphi“); konec; postup TForm1.Button2Click (odesílatel: TObject);
začít
SayHello ('Zarko Gajic'); ShowMessage („Vy jste“ + IntToStr (YearsOld (1973)) + „roky!“); konec;
Funkce a postupy
Jak vidíme, funkce i postupy fungují jako mini-programy. Zejména mohou mít v sobě svůj vlastní typ, konstanty a proměnná prohlášení.
Podívejte se blíže na (různé) funkce SomeCalc:
funkce SomeCalc. (konst sStr: tětiva; konst iYear, iMonth: integer; var iDay: integer): boolean; začít...konec;
Každá procedura nebo funkce začíná a záhlaví který identifikuje postup nebo funkci a uvádí seznam parametry rutinní použití, pokud existuje. Parametry jsou uvedeny v závorkách. Každý parametr má identifikační název a obvykle má typ. Středník odděluje parametry v seznamu parametrů od sebe navzájem.
Jsou volány sStr, iYear a iMonth konstantní parametry. Konstantní parametry nelze pomocí funkce (nebo postupu) změnit. IDay je předán jako var parametra můžeme v něm provést změny uvnitř podprogramu.
Funkce, protože vracejí hodnoty, musí mít návratový typ deklarováno na konci záhlaví. Návratová hodnota funkce je dána (konečným) přiřazením k jejímu názvu. Protože každá funkce implicitně má lokální proměnnou Výsledek stejného typu jako návratová hodnota funkcí, přiřazení výsledku má stejný účinek jako přiřazení názvu funkce.
Podprogramy pro určování polohy a volání
Podprogramy jsou vždy umístěny v implementační části jednotky. Takové podprogramy mohou zavolat (použít) obsluha události nebo podprogram ve stejné jednotce, která je definována po ní.
Poznámka: klauzule použití jednotky vám řekne, které jednotky může volat. Pokud chceme, aby konkrétní podprogram v Unit1 byl použitelný pro obsluhu událostí nebo podprogramy v jiné jednotce (řekněme Unit2), musíme:
- Přidejte Unit1 do klauzule použití Unit2
- Umístěte kopii záhlaví podprogramu do sekce rozhraní jednotky Unit1.
To znamená, že podprogramy, jejichž záhlaví jsou uvedena v sekci rozhraní, jsou globální rozsah.
Když nazýváme funkci (nebo proceduru) uvnitř své vlastní jednotky, používáme její jméno s čímkoli parametry jsou potřeba. Na druhou stranu, pokud voláme globální podprogram (definovaný v jiné jednotce, např. MyUnit), použijeme název jednotky následovaný tečkou.
... // V této jednotce je definován postup SayHello
SayHello („uživatel Delphi“); // Funkce YearsOld je definována uvnitř jednotky MyUnit
Dummy: = MyUnit. YearsOld (1973);...
Poznámka: funkce nebo procedury mohou mít v sobě zabudované vlastní podprogramy. Vložený podprogram je lokální pro podprogram kontejneru a nelze jej použít jinými částmi programu. Něco jako:
postup TForm1.Button1Click (Sender: TObject); funkce Je malý(konst sStr:tětiva): boolean; začít// IsSmall vrátí True, pokud je sStr malými písmeny, jinak Falešné
Výsledek: = LowerCase (sStr) = sStr; konec; začít// IsSmall lze použít pouze v události Button1 OnClick-li IsSmall (Edit1.Text) pak
ShowMessage („Všechny malé kapitálky v Edit1.Text“)
jiný
ShowMessage ('Ne všechny malé velká písmena v Edit1.Text'); konec;