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

2.11. Operator kontynuacji continue

Operator kontynuacji continue służy do przerywania działań zapisanych w ciele operatorów for , while i do ... while . W odróżnieniu od break, który przerywa całą pętlę, continue przerywa tylko bieżącą iterację od miejsca, gdzie taka sytuacja zaistnieje, po czym rozpoczyna się nowa iteracja.

W celu demonstracji działania operatora continue przeanalizujmy razem następujące zadanie. Na przykład, mamy tablicę składającą się z 10 elementów, która zawiera dodatnie i ujemne cyfry i chcemy znaleźć sumę wszystkich dodatnich cyfr.

Kod 1
#property strict

void OnStart()
  {
//---
   int Array[] =           // deklaracja i inicjalizacja tablicy Array
     {
      5, 0, 124, -1, -55, 8, -2, -2, -2, -4
     };
   int Suma = 0;           // deklaracja i inicjalizacja zmiennej Suma

//--- pętla 'for'
   for(int i = 0; i < 10; i++)
     {
      //---
      if(Array[i] < 0)     /* jeśli napotykamy się na
                              ujemną cyfrę i-tego elementu tablicy */

         continue;         /* przerywamy tę iterację
                              i pętla 'for' rozpoczyna nową */

         Suma += Array[i];
     }
//---
   Print("Suma dodatnich cyfr tablicy Array = " , Suma , ".");
//---
  }

Najpierw deklarujemy tablicę Array i od razu wypełniamy ją 10 elementami. W niej elementy z indeksami 0 (cyfra 5), 1 (cyfra 0), 2 (cyfra 124) i 5 (cyfra 8) to są dodatnie cyfry. Tworzymy zmienną Suma, która będzie przechowywać ich sumę. Następnie, w nagłówku operatora for tworzymy licznik i (int i = 0), ilość iteracji ograniczamy do ilości elementów tablicy (i < 10) i po każdej iteracji zwiększamy licznik o 1 (i++). Dalej w ciele pętli widzimy operator if, który sprawdza każdy i - ty element tablicy (Array[i] < 0) czy jest cyfrą ujemną.

W przypadku jeśli warunek w if będzie prawdziwy, tj. trafimy na cyfrę ujemną, uruchomi się operator continue, który z tego miejsca przerwie dalsze działania w pętli, aby rozpocząć nową iterację. Jeśli zaś warunek będzie fałszywy, tj. cyfra będzie dodatnia, wtedy działanie przejdzie do instrukcji Suma += Array[i], gdzie do Suma zostanie dodana nowa liczba dodatnia.


A teraz po kolei.

Na 1-ej iteracji (i = 0), sprawdza się element tablicy z indeksem 0. Tym elementem jest cyfra 5. Ponieważ wynik porównania (5 < 0) to fałsz, program przechodzi do instrukcji dodania tej liczby do zmiennej Suma. Na 2-ej iteracji cyfra 0, jako element tablicy z indeksem 1, też zostanie dodana do Suma. Tak samo na 3-ej iteracji cyfra 124, jako element tablicy z indeksem 2, zostanie dodana do Suma.

A już na 4-ej iteracji (i = 3) wynik porównania w if będzie (-1 < 0) - prawda, ponieważ Array[3] to cyfra (minus) -1. W tym przypadku zostanie uruchomiony operator continue, który przerwie bieżącą iterację i nie pozwoli do zmiennej Suma dodać tę ujemną cyfrę.

Na 5-ej iteracji dla 4-go elementu tablicy, tj. cyfry -55, też zadziała operator continue i tak do końca, ponieważ pozostałe elementy to są cyfry ujemne. Następnie za pomocą funkcji Print() skrypt wyświetli wynik obliczenia w logach terminala.


Na poniższym obrazku przedstawiono schemat działania operatora continue. Wewnątrz pętli for (lub while lub do … while) widać jak iteracje powtarzają się jedna po drugiej (zielone strzałki) i jeśli w trakcie którejś z nich zaistnieje sytuacja, kiedy trzeba przerwać tylko bieżącą iterację i nie dopuścić do uruchomienia instrukcji po continue, ten operator ją przerywa i rozpoczyna się następna iteracji tej samej pętli (czerwona strzałka).

Rys. 1. Schemat działania operatora continue.


Operator continue przerywa działanie bieżącej iteracji pętli for, while, do ... while i powoduje rozpoczęcie nowej.