next up previous contents
Next: Špatné používání parametrů v podprogramech Up: Podprogramy Previous: Nepoužíváte podprogramy   Obsah

Globální proměnné v podprogramech

Použití globálních proměnných v podprogramech (procedurách nebo funkcích) je velmi nebezpečná a nepřehledná programátorská konstrukce. Chyby, které v důsledku jejich použití vznikají, se jenom velmi těžko hledají.

Nejhorší je, když v podprogramu modifikujete globální proměnnou za účelem výměny hodnot s jiným podprogramem. Pro toto slouží parametry procedur a funkcí. Sice se vám může zdát, že se zbytečně zavádí další proměnné, ale věřte, že to zbytečné není.

Velké problémy si také můžete způsobit, když používáte globální proměnnou jako pomocnou proměnnou ve dvou podprogramech. V tomto případě může dojít k nechtěné výměně dat mezi podprogramy. Jistě si dokážete představit, co se stane, když si do takové proměnné uložíte v jednom podprogramu nějaký mezivýsledek a ve druhém podprogramu jej pak nechtěně použijete. Takové chyby se velmi těžko hledají a často se nějakou dobu (většinou po dobu testování) vůbec neprojeví.

Pokud použijete v podprogramu globální proměnnou, výrazně omezíte jeho použitelnost. Naproti tomu pokud použijete místo globálních proměnných parametry, vytvoříte podprogram, který je do jisté míry nezávislý na svém okolí. Takový podprogram můžete volat na různých místech programu a s různými hodnotami parametrů. Případně jej můžete použít při řešení dalších projektů.

K používání globálních proměnných v podprogramech může svádět i nevhodně umístěná deklarace. Raději proto deklarujte proměnné vždy bezprostředně před tím blokem kódu, ve kterém je budete používat (netýká se to jenom globálních proměnných, ale i vnořených procedur a funkcí).

Namísto tohoto:

var
  cislo : integer;

procedure necoUdelej(parametr : string);
begin
  {nějaká činnost}
end;


begin
  {nějaká činnost s~proměnnou cislo}
end.
to udělejte takto:
procedure necoUdelej(parametr : string);
begin
  {nějaká činnost}
end;

var
  cislo : integer;
begin
  {nějaká činnost s~proměnnou cislo}
end.


next up previous contents
Next: Špatné používání parametrů v podprogramech Up: Podprogramy Previous: Nepoužíváte podprogramy   Obsah
David Martinek 2002-10-01