AutoIt/Instrukcje sterujące
Pętle
edytujWhile ... Wend
edytujPodstawową pętlą w AutoIt jest pętla While. Pętla jest wykonywana tak długo, jak długo warunek po While jest prawdziwy.
While <warunek> ; warunek wykonania pętli <polecenia> ; polecenia które chcemy wykonywać w pętli ... Wend ; oznacza koniec pętli
Przykład:
$i = 0 ; początkowa wartość zmiennej $i
While $i < 10 ; sprawdzenie wartość zmiennej $i
MsgBox(0, "Pętla", $i) ; wyświetlenie aktualnej wartość $i
$i += 1 ; zwiększenie o 1 wartość zmiennej $i
WEnd ; koniec pętli
W tym przypadku pętla zostanie wykonana dziesięć razy, ponieważ przy 11 próbie zmienna $i osiągnie wartość 10, przez co przekroczy warunek pętli while.
Pętla z warunkiem 1 jest wykonywana w nieskończoność.
While 1
MsgBox(0, "", "Hello World!")
Wend
Do ... Until
edytujKolejnym typem pętli jest pętla Do...Until. Jest ona bardzo podobna do pętli While, jednak tutaj wprowadzamy warunek zakończenia pętli. Tego typu pętla zawsze będzie wykonana przynajmniej raz (pętla While może nie być wykonana ani razu, gdy warunek od razu nie jest spełniony):
$i = 0
Do
MsgBox(0, "Pętla", $i)
$i += 1
Until $i = 10 ; warunek zakończenia pętli
For ... To ... Next
edytujStosowanie While lub Until jako pętli, która ma wykonana określoną ilość razy nie jest wygodne. Wygodniej jest posłużenie się kolejnym typem pętli:
For <licznik = początkowa wartość> to <Wartość licznika powyżej której pętla nie będzie wykonywana> <polecenia, które zostaną wykonywane w pętli> Next ;oznaczenie końca pętli
Za każdym przejściem pętli jej licznik jest zwiększany o 1.
Przykład:
For $i = 1 To 10
MsgBox(0, "Pętla", $i)
Next
Step jest dodatkowym argumentem pętli For..To.. - oznacza on, o ile będzie się zmieniać wartość $i przy każdym kroku (zamiast domyślnego +1).
W tym przypadku, wartość zmienia się o 2:
For $i = 1 To 10 Step 2
MsgBox(0, "Pętla", $i)
Next
A w tym odliczanie do tyłu:
For $i = 10 To 1 Step -1
MsgBox(0, "Pętla", $i)
Next
For ... In ...Next
edytujPętla po indeksach tablicy (tylko dla tablic jednowymiarowych):
For $zmienna In $tablica
MsgBox(0, "Pętla", $zmienna)
Next
Zmienna po For przyjmuje wartość kolejnych komórek tablicy.
Składnia AutoIt umożliwia zagnieżdżenie pętli (pętla w pętli):
While 1
For $repeat = 10 To 1 Step -1 ;
MsgBox(0, "Pętla", $repeat)
Next
WEnd
Dodatkowe polecenie wewnątrz pętli
edytujContinueLoop
edytujPolecenie natychmiastowego powrotu na początek pętli przed osiągnięciem jej końca.
For $i = 10 To 1 Step -1 ;
If $i = 5 Then ContinueLoop
MsgBox(0, "Pętla", $i)
Next
W tym przypadku pętla pominie wyświetlanie 5, ponieważ ContinueLoop nakazuje powrót do początku pętli zanim ta mogłaby wyświetlić wartość 5.
Po ContinueLoop można podać liczbę określającą, do którego poziomu pętli mamy wrócić (domyślnie jest to 1). Ma to zastosowanie w pętlach zagnieżdżonych.
Powrót o jeden poziom:
While 1
For $i = 1 To 10
MsgBox(0, "Pętla", $i)
If $i = 5 Then ContinueLoop ;powrót do For
Next
WEnd
Powrót o dwa poziomy:
While 1
For $i = 1 To 10
MsgBox(0, "Pętla", $i)
If $i = 5 Then ContinueLoop 2 ;powrót do While
Next
WEnd
ExitLoop
edytujPolecenie natychmiastowego wyjścia z pętli. ExitLoop przerwie pętlę "While", "Do" lub "For".
For $i = 10 To 1 Step -1
MsgBox(0, "Pętla", $i)
If $i = 5 Then ExitLoop
Next
W powyższym przykładzie pętla zakończy się po osiągnięciu wartości 5 przez zmienną $i.
Po ExitLoop można podać liczbę określającą ile poziomów pętli mamy opuścić (domyślnie jest to 1). Ma to zastosowanie w pętlach zagnieżdżonych.
Wyjście o jeden poziom:
While 1
For $i = 1 To 10
MsgBox(0, "Pętla", $i)
If $i = 5 Then ExitLoop ; opuszczenie pętli For...Next - pozostaje wewnątrz While..WEnd
Next
WEnd
Wyjście o dwa poziomy:
While 1
For $i = 1 To 10
MsgBox(0, "Pętla", $i)
If $i = 5 Then ExitLoop 2 ; opuszczenie pętli For...Next i While...WEnd
Next
WEnd
Instrukcje warunkowe
edytujIf...Elseif...Else...Endif
edytujIf <warunek> Then <polecenie>
lub
If <warunek> Then <polecenie> <polecenie> ... Endif ; Koniec poleceń wykonywanych przy spełnieniu warunku
Podczas deklarowania warunków można korzystać z operatorów logicznych (OR, AND, NOT):
If <warunek1> <operator logiczny> <warunek2>... Then <polecenie>
Operatory logiczne:
AND - polecenia zostaną wykonane jedynie wtedy, gdy <warunek1> i <warunek2> zostaną spełnione.
OR - polecenia zostaną wykonane jedynie wtedy, gdy <warunek> albo <warunek2> zostanie spełniony.
NOT - Polecenie zostanie wykonane gdy warunek nie zostanie spełniony.
Pozostało omówić jeszcze Elseif...Else:
If <warunek> Then ; główny warunek <instrukcja wykonywana jeśli spełniony zostanie warunek główny> ... Elseif <inny warunek> Then ; dodatkowy warunek <instrukcja wykonywana jeśli spełniony zostanie drugi warunek, a pierwszy nie> ... Else <instrukcja wykonywana jeśli nie zostanie spełniony żaden z warunków> ... Endif
$i = 1
While 1
If $i >= 2 And $i < 11 Then
MsgBox(0, "Pętla", $repeat)
EndIf
$i += 1
WEnd
Polecenia wpisane w warunek Elseif oraz Else zostają wykonane jedynie wtedy, gdy główny warunek nie zostaje spełniony. Po napotkaniu pierwszego spełnionego warunku po If lub Elseif reszta kodu aż do Endif zostanie pominięta.
Polecenia po Else zostaną wykonane tylko wtedy, gdy żaden warunek nie będzie spełniony.
_Przyklad(30)
Func _Przyklad($iWiek)
If ($iWiek < 0) Then
MsgBox(0, "Przykład", "Nie można mieć mniej niż 0 lat")
ElseIf ($iWiek = 0) Then
MsgBox(0, "Przykład", "Masz 0 lat")
ElseIf $iWiek >= 1 And $iWiek < 10 Then
MsgBox(0, "Przykład", "Masz mniej niż 10 lat")
ElseIf $iWiek >= 10 And $iWiek < 20 Then
MsgBox(0, "Przykład", "Masz mniej niż 20 lat")
ElseIf ($iWiek >= 20 And $iWiek < 30) Or $iWiek = 30 Then
MsgBox(0, "Przykład", "Masz mniej niż 30 lub 30 lat")
ElseIf $iWiek > 30 And $iWiek < 40 Then
MsgBox(0, "Przykład", "Masz mniej niż 40 lat")
ElseIf $iWiek >= 40 And $iWiek < 50 Then
MsgBox(0, "Przykład", "Masz mniej niż 50 lat")
Else
MsgBox(0, "Przykład", "Masz co najmniej 50 lat")
EndIf
EndFunc ;==>_Przyklad
Ternery operator (potrójny operator warunkowy)
edytuj(warunek) ? (w_1) : (w_2)
Zwraca wartość wyrażenia w_1 gdy warunek jest prawdziwy, lub wyrażenia w_2 gdy warunek jest fałszywy.
$c = ($a > $b) ? $a-$b : 0
jest równoważne następującej sekwencji:
If $a > $b Then
$c = $a - $b
Else
$c = 0
EndIf
Switch...Case...Case Else...EndSwitch
edytujSwitch <wyrażenie> Case <wartość> [To <wartość>] [,<wartość> [To <wartość>] ...] <instrukcja> ... [Case <wartość> [To <wartość>] [,<wartość> [To <wartość>] ...]] <instrukcja> ...] [Case Else <instrukcja> ...] EndSwitch
Przykład:
$iMiesiac = 0
While $iMiesiac + 1 < 7
Switch $iMiesiac + 1
Case 1 ; gdy wyrażenie $iMiesiac+1 = 1
MsgBox(0, "", "Styczeń")
Case 2 ; gdy wyrażenie $iMiesiac+1 = 2
MsgBox(0, "", "Luty")
Case 3 To 4, 5 ; gdy wyrażenie $iMiesiac+1 = <od 3 do 4> lub $iMiesiac+1 = 5
MsgBox(0, "", "Marzec, Kwiecień albo Maj...")
Case Else
MsgBox(0, "", "...a teraz na pewno Czerwiec") ; w pozostałych przypadkach
EndSwitch
$iMiesiac += 1
WEnd
Select...Case...Case Else...EndSelect
edytujJest podobne do Switch...Case...EndSwitch jednak w tym przypadku nie jesteśmy ograniczeni 1 argumentem, możemy je dowolnie dobierać.
Select Case <warunek> <instrukcja> ... [Case <warunek> <instrukcja> ...] [Case Else <instrukcja> ...] EndSelect
Poniższy skrypt wyświetla nazwy miesięcy, ponadto prezentuje zastosowanie Case Else, jako argumentu:
While 1
Select
Case $iMiesiac = 1
MsgBox(0, "", "Styczeń")
Case $iMiesiac = 2
MsgBox(0, "", "Luty")
Case $iMiesiac = 3
MsgBox(0, "", "Marzec")
Case $iMiesiac = 4
MsgBox(0, "", "Kwiecień")
Case $iMiesiac = 5
MsgBox(0, "", "Maj")
Case $iMiesiac = 6
MsgBox(0, "", "Czerwiec")
Case Else
MsgBox(0, "", "Dalej nie odliczam - mam wakacje")
ExitLoop
EndSelect
$iMiesiac = $iMiesiac + 1
WEnd
ContinueCase
edytujPolecenia Switch i Select kończą działanie po natrafieniu na pierwszy spełniony warunek. Można jednak wymusić sprawdzanie następnych warunków używając polecenia ContinueCase, np.:
Switch $a
Case 1
$bMessage = False
ContinueCase
Case 2 To 5, 10
$bMessage1 = True
EndSwitch
Inne instrukcje sterujące
edytujWstrzymanie wykonania skryptu
edytujSleep ( czas )
Funkcja powoduje wstrzymanie wykonania skryptu na okres czasu podany w milisekundach. Maksymalny okres to 2147483647 ms (24 doby). Funkcja nie zwraca żadnej wartości.
Sleep(5000) ;wstrzymanie wykonania skryptu na 5 sekund
Zakończenie działania skryptu
edytujExit
Normalnie działanie skryptu kończy się w momencie osiągnięcia końca kodu. Polecenie Exit umożliwia zakończenie w dowolnym miejscu kodu.
Przykład:
$iNumer = 0
If $iNumer = 0 Then Exit ;jeżeli $iNumer = 0 zakończenie skryptu
MsgBox(0, "", "Komunikat") ;jeżeli $iNumer = 0 komunikat nie będzie wyświetlony
Funkcja Exit może przekazywać wartość. Wtedy wywołanie będzie wyglądało następująco:
Exit kod
lub
Exit (kod)
gdzie kod oznacza przekazywany przez Exit kod, który musi być liczbą typu Integer.
Kod ten zostanie wyświetlony w konsoli i jest przekazywany do makra @exitCode. Kod można odczytać z makra w funkcji zarejestrowanej przez OnAutoItExitRegister.
Domyślna wartość przekazywana wynosi 0.
Forma wywołania Exit() jest niedopuszczalna i powoduje błąd.
Przykład:
$iKod = 777
Exit $iKod