Jj, dneska to s tim opakovanim kodu neplati. Pokud chces mit prehledny program, pise se vse do class. To ale pascal jeste nepodporuje, nejspis.
Globalni promenna plati pro cely program, lokalni jen uvnitr procedury/funkce (po ukonceni funkce obsah zanika).
Dam ti priklad z php, protoze tam se pise primo slovo global.
function aaa()
{
global $X;
$Y = 4;
var_dump($X); // vypise 5
var_dump($Y); // vypise 4
}
function bbb()
{
$Y = 4;
var_dump($X); // $X undefined
var_dump($Y); // vypise 4
}
$X = 5;
aaa();
bbb();
var_dump($X); // vypise 5
var_dump($Y); // $Y undefined
Volani hodnotou a adresou.
Kdyz vytvoris promenou, tak pc si nekde v pameti zablokuje cast a propoji adresu pameti na promenou. Vzdy, kdyz pouzijes a := cokoliv, tak na adresu pameti ulozenou pro 'a' zapise data.
A ted, kdyz pouzijes proceduru nebo funkci a predavas ji parametry, tak ji muzes predat hodnotu ulozenou v a nebo adresu pameti, kde je ulozena hodnota pro 'a'.
Pri zadavani do procedury, procedura obvykle klonuje hodnotu promene. Coz za normalnich okolnosti nevadi. Ale kdyz treba pracujes s 1 G, tak zklonovani obsahu chvili trva a taky zabira duplicitne misto. Takze lze predat procedure jen adresu pameti.
a := 5; // a je nazev promenne, alias pro misto v pameti, 5 je hodnota
Vem si treba 1G pameti. Neco mas uz zaplnene. Pri vytvareni 'a' pres var ti prideli pozici v pameti 954331. 'a' bude typ integer, integer je 32 bitove cislo (4 byte), takze zabira pamet
954331, 954332, 954333, 954334
Kdyz to procedura zklonuje, tak mas
a: 954331 .. 954334
procedura promenna x: 974331 .. 974334 (nejake jine misto v pameti, 4 byte)
Klonovani je ale vyhodne, protoze prepsanim 'x' v procedure neprepise 'a' v jine casti programu. Viz globalni a lokalni promene. Prima adresa je jako globalni, klonovani je lokalni promena.
Jak se to resi v pascalu nevim, ale pro php to vypada takto
function xxx($x) {$x=7;} hodnota, lokalni
function yyy(&$y) {$y=8;} adresa, globalni
$a = 6;
var_dump($a); // vypise 6
xxx($a);
var_dump($a); // vypise 6
yyy($a);
var_dump($a); // vypise 8