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

2.9. Operator pętli do ... while

Przed omówieniem do ... while przypomnę, że w innych operatorach pętli for oraz while najpierw sprawdza się czy można przystąpić do realizacji działań zapisanych w ciele pętli, tj. przed iteracją, dopiero potem są one realizowane. Z kolei w przypadku operatora pętli do ... while prawdziwość warunku sprawdzana jest po zakończeniu iteracji, a nie przed. W tym przypadku pierwsza iteracja zawsze jest realizowana. Właściwie jest to jedyna różnica w porównaniu z operatorem while.

Schemat tej pętli można przedstawić w następujący sposób.

Kod 1
do
  {
   // powtarzalne działanie
  }
while(condition); // na końcu nie zapomnij zapisać średnik !

Posługując się wcześniejszym przykładem dla while, przygotujmy teraz skrypt używając do ... while.

Kod 2
#property strict

void OnStart()
  {
   int    A = 0;
   double Result = 1.0;

//--- pętla 'do ... while'
   do
     {
      Result *= 2; // mnożenie Result na 2
      A++;         // zwiększenie A o 1
     }
   while(A < 10);

//--- wyświetlić wynik
   Print("Result = " , Result); // Result = 1024.0
  }

Wynik obliczenia będzie taki sam jak w poprzednim przykładzie (Result = 1024.0). Jednak jeśli od samego początku podstawimy fałszywy warunek to wynik już będzie inny. Przeanalizuj poniższy kod skryptu, gdzie wynik najpierw zostanie obliczony za pomocą operatora while (1), a potem do ... while (2).

Kod 3
#property strict

void OnStart()
  {
//--- 1)
   int    A = 0;        // utworzenie zmiennej A i przypisanie jej wartości 0
   double Result = 1.0; // utworzenie zmiennej Result i przypisanie jej wartości 1.0

//--- pętla 'while'
   while(A < -1)        // fałszywy warunek
     {
      Result *= 2; // mnożenie Result na 2
      A++;         // zwiększenie A o 1
     }
//--- wyświetlić wynik
   Print("Result dla 'while' = " , Result); // Result = 1.0

//--- 2)
   A = 0;               // przypisanie zmiennej A wartości 0
   Result = 1.0;        // przypisanie zmiennej Result wartości 1.0

//--- pętla 'do... while'
   do
     {
      Result *= 2; // mnożenie Result na 2
      A++;         // zwiększenie A o 1
     }
   while(A < -1);       // fałszywy warunek
//--- wyświetlić wynik
   Print("Result dla 'do ... while' = " , Result); // Result = 2.0
  }

W tym kodzie dla operatora while wynik Result będzie równy 1.0, dlatego że fałszywość warunku w nagłówku while od razu uniemożliwi realizację żadnej iteracji pętli. Dla operatora do ... while Result będzie równy 2.0, dlatego że pierwsza iteracja zostanie zrealizowana przez operator do, a dopiero potem while, sprawdzając prawdziwość warunku, uniemożliwi działanie pętli.


W pętli do ... while działania zapisane w do { } przynajmniej raz zostaną wykonane.