6. Zmienne globalne i lokalne.

6.5. Inicjalizacja identycznych zmiennych

W tym rozdziale omówimy przykłady, kiedy w ramach jednego programu można legalnie stosować zmienne o takiej samej nazwie. Przeanalizuj poniższy kod 1.

Kod 1
#property strict

void OnStart()
  {
   //...
  
   //--- 1. granica obszaru lokalnego 'for', początek
   for(int i = 0; i < 100; i++)
     {
      //...
     }
   //--- 1. granica obszaru lokalnego 'for', koniec

   //--- 2. granica obszaru lokalnego 'for', początek
   for(int i = 0; i < 100; i++)
     {
      //...
     }
   //--- 2. granica obszaru lokalnego 'for', koniec
  
   //...
  }

Co tu widzimy? W obszarze głównej funkcji skryptu OnStart() za pomocą operatora pętli for utworzono 2 obszary lokalne: granice 1-ego są zaznaczone na zielono, a 2-ego na czerwono. W obu przypadkach w nagłówku for inicjalizowana jest zmienna o nazwie i (int i = 0). W tym kodzie dla kompilatora wszystko będzie grało, nie będzie ani błędu ani ostrzeżenia.

W odróżnieniu od przykładu opisanego w poprzednim rozdziale tutaj te 2 obszary nie pokrywają się. Żaden z nich nie został zapisany wewnątrz drugiego. Wiemy już, że czas życia zmiennej jest ograniczony czasem życia obszaru, gdzie została ona utworzona. Dlatego, kiedy program kończy pracę w obszarze 1-ego operatora for, zmienna i zostaje usunięta z pamięci RAM. Kiedy program dochodzi do 2-ego for to na potrzeby tej pętli w RAM tworzy się nowa zmienna i. Nie ma tu żadnej kolizji, ponieważ w tym momencie w pamięci programu nie istnieje inna zmienna o tej samej nazwie.


Jeszcze jeden przykład (kod 2).

Kod 2
#property strict

void OnStart()
  {
   bool LocalFlag = false;

   if(LocalFlag == true)
     {
      int LocalVariable = 7;
      Print("LocalVariable = ", LocalVariable);
     }
   else
     {
      int LocalVariable = 55;
      Print("LocalVariable = ", LocalVariable);
     }
  }

W tym przypadku, dwa obszary lokalne utworzone przez if i else znajdują się jeden po drugim i nie pokrywają się. W związku z tym w każdym z nich można bezpiecznie tworzyć identyczne zmienne.