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