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