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.
#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.
#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.