Chcel by som sa spýtať, či treba predávať globálne premenné definované v hlavnom programe pomocou argumentov, alebo to nie je potrebné. Je v tom vôbec nejaký rozdiel?
var a:integer;
procedure moznost1;
begin
a:=1;
end;
procedure moznost2(var a:integer);
begin
a:=2;
end;
begin
moznost1; {a=1}
moznost2(a); {a=2}
end.
V tejto ukazke napriklad v "moznost1" toto predanie parametrami vynechavam. V tomto pripade to sice funguje, ale je to korektne? Bude to fungovat vzdy spravne?
Dakujem
Aha práve som to zistil.
var a:integer;
procedure dva;
begin
writeln(a); {}
read(a);
end;
procedure jedna(a:integer);
begin
a:=10;
dva;
end;
begin
a:=20;
jedna(a);
end.
Teda ked pracujem s premennou "a" v procedure "dva" tak je to vlastne ta globalna prenenna "a" a nie lokalna verzia z oboru platnosti funkcie "jedna", z ktorej som ju volal. Nebolo by logickejšie keby zo bola tá premenná z volanej funkcie? Je to v ostatných jazykoch rovnako?
Dakujem za odpoved
nie
>> Teda ked pracujem s premennou "a" v procedure "dva" tak je to vlastne ta globalna prenenna "a"
ano
>> teda nie lokalna verzia z oboru platnosti funkcie "jedna"
lokalne premenne su neviditelne mimo vlastnu proceduru
>> Nebolo by logickejšie keby zo bola tá premenná z volanej funkcie?
nie, mohol by si lubovolne menit lokalne premenne "rodicovskej funkcie", program by bol imho neudrziavatelny, predstav si toto:
Funckcia "sin" je nejaka cudzia funkcia. Urcite by jej autor potreboval nejake pomocne premenne na docasne vypocty, medzisucty atd. Keby si nahodou on zvolil pomocnu premennu "a" tak by prepisal tvoju premennu a. Cize autor funckie sinus by musel poznat mena vsetkych lokalnych premennych vo vsetkych existujucich aj buducich programoch a musel by pouzit iny identifikator.