6. Zmienne globalne i lokalne.

6.1. Zmienne globalne i lokalne

Ta lekcja jest kontynuacją tematu związanego ze zmiennymi. W rozdziale 1.3. Zmienne lekcji "1. MQL4 dla początkujących. Część I" zaczęliśmy o nich rozmawiać, a cała lekcja 3. MQL4 dla początkujących. Część III poświęcona omówieniu typów zmiennych jakie istnieją w MQL4. Nadszedł czas żeby poznać kolejną ważną cechę zmiennych, jaką jest obszar ich działania w programie albo mówiąc inaczej obszar ich widoczności.

Istnieją dwa podstawowe typy obszarów działania zmiennych - globalny i lokalny. Każdy z tych obszarów definiowany jest miejscem utworzenia zmiennej w kodzie źródłowym. Jeśli została ona utworzona (zainicjowana) poza granicami jakiejkolwiek funkcji, to staje się ona zmienną globalną i jest dostępna w każdym miejscu programu. Jeśli utworzono ją w ciele funkcji lub operatora, to jest to zmienna lokalna i dostępna tylko w granicach tej funkcji lub operatora.

Kod 1
#property strict

int GlobalVariable = 555; // zmienna globalna

//--- główna funkcja skryptu OnStart()
void OnStart()
  {
   int LocalVariable = 7; // zmienna lokalna
   //...
  }

W powyższym kodzie 1 widzimy jedną globalną zmienną typu int o nazwie GlobalVariable, której przypisano wartość 555. Dalej w ciele głównej funkcji skryptu OnStart(), tj. między {}, widzimy 1 lokalną zmienną typu int o nazwie LocalVariable, której przypisano 7. Po uruchomieniu tego skryptu w MetaTrader 4 najpierw następuje inicjalizacja globalnej zmiennej, dopiero potem, gdy sterowanie przedzie do OnStart(), po kolei będą realizowane instrukcje i działania zapisane w ciele funkcji. W tym przykładzie jako pierwsza instrukcja idzie inicjalizacja lokalnej zmiennej.

Spróbujmy wyobrazić sobie ten program za pomocą dwóch platform położonych jedna na drugiej (rys 1). Duża platforma nr 1 będzie symbolizować poziom globalnych zmiennych, a nr 2 - obszar lokalnych zmiennych funkcji OnStart().

Rys. 1. Schemat programu: poziom globalny i obszar lokalny.


Widzimy, że poziom globalny jest jak by podstawą dla wszystkich obszarów lokalnych. W momencie kiedy działanie programu przechodzi do funkcji OnStart() tworzy ona swój obszar lokalny, granice którego są ograniczone klamrami {}. Jeśli w tym obszarze program będzie potrzebował obie zmienne to będą one "widoczne". Zademonstruję to na przykładzie kodu 2.

Kod 2
#property strict

int GlobalVariable = 555;

//--- granica obszaru lokalnego OnStart(), początek
void OnStart()
  {
   int LocalVariable = 7;
   Print("GlobalVariable = ", GlobalVariable);
   Print("LocalVariable = ", LocalVariable);
  }
//--- granica obszaru lokalnego OnStart(), koniec

Po uruchomieniu tego skryptu w MetaTrader 4 w dzienniku logów terminala widać, że program elegancko wyświetlił dane zarówno globalnej jak i lokalnej zmiennej (rys. 2).

Rys. 2. Wynik działania skryptu.


Zmienne, utworzone na poziomie globalnym, są dostępne w programie we wszystkich obszarach.