Tentokrát se dozvíte něco o procedurách a funkcích. ..
Lekce č.6
Tentokrát se dozvíte něco o procedurách a funkcích. Přeji příjemný počteníčko;).
Procedury a funkce
Neboli tak zvané podprogramy. Pomocí nich se program rozděluje na několik samostatných podprogramů. Které potom jen hlavní program ve vhodnou chvíli volá. Pomáhá to řešit problém tak že ho neřešíme celý najednou ale rozdělíme si ho do několika menších problémů. A také je to velice dobrá věc v tom pokud se má nějaká věc v programu opakovat nemusí ji znovu celou psát ale jenom stačí zavolat jednou napsaný podprogram (tedy funkci nebo proceduru)
Funkce
Procedura je téměř stejná jako funkce liší se od ní jen tím že nevrací hodnotu a funkci se musí přiřadit její datový typ. Definice funkce může vypadat takto:
function
TForm1.dvakrat (hodnota : integer): integer;
begin
dvakrat:=hodnota*2;
end;
Každá funkce se před použitím musí deklarovat:
...
type
TForm1 = class(TForm)
function dvakrat (hodnota : integer): integer;
...
Teď už funkci stačí jen zavolat:
...
cislo:=dvakrat(10);
...
Do proměnné číslo se uloží hodnota 20;)
Procedury
Definice procedury může vypadat takto:
procedure
TForm1.zprava;
begin
ShowMessage('kuk');
Beep;
end;
Každá procedura se před použitím musí deklarovat:
...
type
TForm1 = class(TForm)
procedure zprava;
...
Teď už stačí jen zavolat proceduru:
...
zprava;
...
Pokaždé když se takto zavolá procedura zprava tak vyskočí hláška s nápisem kuk:)
Funkce a procedury s parametry
Všechno další v podstatě platí pro procedury i funkce společně. Já budu sice psát o procedurách ale jde to tak i u funkcí;)
Je sice pěkné že procedura zprava nám vyvolá okno s nápisem kuk ale co když budeme chtít vypsat úplně jiný text. Aby jsme nemuseli psát úplně novou proceduru tak proceduře zprava prostě přidáme parametr:
procedure
TForm1.zprava (TextVOkne:string);
begin
ShowMessage(TextVOkne);
Beep;
end;
Proceduru už jen stačí zavolat se správnou hodnotou:
...
zprava('baf:D')
...
Takto to vypadá jednoduše ale zas tak jednoduché to bohužel není. Pascal rozlišuje 3 druhy parametrů. Ten který jsme teď použili je parametr předávaný hodnotou. Druhý způsob řeší problém který nastane v této situaci:
procedure
TForm1.zprava (TextVOkne:string);
begin
ShowMessage(TextVOkne);
Beep;
TextVOkne:='proběhla procedura zprava';
end;
...
var param:string;
...
param:='baf:D';
zprava(param);
zprava(param);
...
Teoreticky by se měla vypsat zpráva baf:D a poté proběhla procedura zprava ale tak se nestalo. Lze to napravit použitím parametru předávaným odkazem. Na rozdíl od parametrů předávaných hodnotou kde se do formálních parametrů procedury pouze zkopíruje hodnota skutečného parametru je v tomto případě na místo formálních parametrů dosazena přímo adresa proměnné která je skutečným parametrem. To způsobí že veškeré změny v hodnotě parametru provedené uvnitř procedury zůstanou zachovány i po jejím skončení. Parametr předávaný odkazem se deklaruje podobně jako parametr předávaný hodnotou akorát před ním musí být uvedené slovo var:
procedure
TForm1.zprava (var TextVOkne:string);
Nyní už vše funguje jak má.
Třetím typem je procedura s konstantními parametry. Deklaruje se pomocí slova const:
procedure
TForm1.zprava (const TextVOkne:string);
Funguje tak že její hodnota v průběhu procedury nejde změnit.
Úkol
V úkolu o procedurách a funkcích vám nechám volnost;) Vymyslete si vlastní jednoduchý program ve kterém použijete procedury a funkce s alespoň dvoumy typy parametrů. Těšte se na další lekci budeme dále rozebírat procedury a funkce;)
Funkce Beep slouží k tomu aby počítač pípl;)