2. MQL4 dla początkujących. Część II.

2.12. Operator przerywania return

Operator return przerywa działanie funkcji od miejsca, gdzie program napotka się na ten operator. W przypadku funkcji void OnStart(), która jest główną funkcją skryptu, return zakończy działanie całego skryptu. W przypadku innych typów funkcji return "zwraca” wartość jaką ta funkcja obliczy, o czym można poczytać w lekcjach o funkcjach własnych. Tutaj chciałbym zademonstrować działanie return w głównej funkcji skryptu, tj. wewnątrz OnStart().

Niżej przedstawiam skrypt, który szuka takiego elementu tablicy, wartość którego była by większa niż 100. Jeśli taki się znajdzie, wtedy skrypt wyświetli jego indeks i zaprzestanie dalsze poszukiwania.

Kod 1
#property strict

void OnStart()
  {
//---
   int Array[] =      // deklaracja i inicjalizacja tablicy Array
     {
      1, 2, 4, 8, 16, 32, 64, 128
     };
   int Limit = 100;   // deklaracja i inicjalizacja zmiennej Limit

//--- pętla 'for'
   for(int i = 0; i < 8; i++)
     {
      //---
      if(Array[i] > Limit) // jeśli element tablicy jest większy niż Limit
        {
         // wtedy informujemy o tym użytkownika
         Print("Element tablicy z indeksem " , i ,
               " jest większy niż " , Limit ,
               ". Koniec działania skryptu.");

         /* a następnie przerywamy działanie funkcji OnStart(),
            tj. całego skryptu */

         return;
        }
     }
//---
   Print("Tablica nie zawiera elementów większych niż " , Limit , ".");
//---
  }

W tym kodzie w ciele głównej funkcji skryptu OnStart() najpierw deklarujemy tablicę Array i od razu wypełniamy ją 8 elementami. Tworzymy zmienną Limit, do której będziemy porównywać każdy element tablicy. Następnie, w nagłówku operatora pętli for tworzymy licznik i, przypisując mu od razu wartość 0 (int i = 0). Ilość iteracji ograniczamy do ilości elementów tablicy, tj. do 8 (i < 8) i po każdej iteracji zwiększamy licznik o 1 (i++). Dalej w środku pętli widzimy operator warunkowy if, który sprawdza czy i - ty element tablicy jest większy niż Limit (Array[i] > Limit ).

Jeśli ten warunek będzie fałszywy, wtedy żadne działania zapisane w ciele if nie zostaną zrealizowane. Zaś kiedy wynik porównania stanie się prawdziwy (128 > 100) skrypt przejdzie do realizacji działań zapisanych w ciele if. Tam najpierw funkcja Print() w dzienniku logów terminala poinformuje, że element tablicy z indeksem 7 (cyfra 128) jest większy niż 100. Potem zostanie uruchomiony operator return, który przerwie działanie głównej funkcji skryptu, tj. OnStart(). Wszystko co się znajduje po return zostanie zignorowane.


Przy Limit = 10 skrypt wskaże nam indeks 4 (cyfra 16). Pamiętamy, że w tablicach MQL4 indeksacja elementów zaczyna się od 0, a nie od 1. Operator return w tym przypadku zadziała na 5-ej iteracji (i = 4) i wszystkie kolejne instrukcje zostaną zignorowane.

Przy Limit = 1000 żaden z elementów tablicy nie będzie większy niż 1000 i nie dojdzie do uruchomienia return. Po zakończeniu działania pętli skrypt uruchomi ostatnią funkcję Print(), znajdującą się zaraz po pętli for. W dzienniku logów zobaczymy wpis "Tablica nie zawiera elementów większych niż 1000.".


Operator break przerywa działanie całej funkcji od miejsca, gdzie zostanie on uruchomiony.