30 sierpnia 2014

Zapętlony Tasker

Prędzej czy później (raczej prędzej) tworząc profile w Taskerze potrzebne nam będzie skorzystanie z instrukcji warunkowych i pętli. Dla niewtajemniczonych pewnie brzmi to dość strasznie ale postaram się wszystko łopatologicznie wytłumaczyć. Przed pętlami omówię akcje Goto, Stop oraz etykiety akcji, które będą nam za chwilę potrzebne.
Oczywiście zachęcam do komentowania i zadawania pytań jeśli coś będzie niejasne.

Akcje Goto, Stop oraz etykiety

Zazwyczaj akcje tasku wykonywane są kolejno jeden po drugim. Dzięki akcji Goto możemy wykonać skok do innych części tasku. Skok taki można wykonać do:

  • akcji o wybranym numerze
  • akcji o wprowadzonej etykiecie (label)
  • początku pętli
  • końca pętli
  • końca instrukcji warunkowej If
Etykieta akcji to nazwa nadana przez użytkownika. Tworzy się ją w konfiguracji danej akcji zaznaczając checkbox Label i wpisując nazwę etykiety.
Akcja Stop powoduje natychmiastowe zakończenie przetwarzania tasku.

Instrukcja warunkowa If...Else...End If

Instrukcja warunkowa If jest elementem, który pozwala wykonać pewne akcje w zależności od tego czy zdefiniowane wyrażenie logiczne jest spełnione lub nie.
Instrukcję tą tworzymy za pomocą akcji If, Else oraz End If. W konfiguracji akcji If dokonujemy porównania wartości. Jeśli jest ono spełnione wykonują się akcje po akcji If, jeśli nie, wykonują się akcje po akcji Else (jeśli takowa jest dodana). Jeżeli po instrukcji warunkowej mają być umieszczone inne akcje, nie związane z instrukcją warunkową, trzeba zakończyć ją akcją End If.

Warunek If można też stosować w konfiguracji każdej akcji. Pozwala to uprościć warunki. W powyższym przykładzie warunek If dodany jest w konfiguracji akcji Else dzięki czemu otrzymujemy podwójną instrukcję warunkową. Dla zmiennej %BATT (globalna zmienna Taskera przechowująca poziom naładowania baterii) większej od 90 zostanie wyświetlony tost z tekstem Bateria naładowana. Jeśli wartość zmiennej %BATT będzie mniejsza niż 90 ale większa niż 20 (dodatkowy warunek If w konfiguracji akcji Else) wyświetlony zostanie tost Bateria: powyżej 20%. Jeśli żaden z powyższych warunków nie będzie spełniony zostanie wyświetlony tost Bateria bliska rozładowaniu.

Pętla warunkowa For each...Loop

Pętla warunkowa For each umożliwia wykonanie zestawu akcji dla wybranych wartości nadawanych zmiennej. Akcja For each może przyjmować następujące zestawy wartości:

  • wartości tekstowe oddzielone przecinkami np. dom,drzewo,koń,samochód
  • wartości liczbowe oddzielone przecinkami np. 3,5,8,9
  • zakres wartości liczbowych np. 2:8 co jest równoznaczne z 2,3,4,5,6,7,8
  • zakres wartości liczbowych ze zdefiniowanym skokiem np. 0:10:2 co jest równoznaczne z 0,2,4,6,8,10
  • część zmiennej typu macierz np. %macierz(1:2) co jest równoznaczne z %macierz1,%macierz2
Jeśli jako zestaw wydajności podana zostanie zmienna typu macierz w takim zapisie %macierz() to pętla zostanie wykonana dla jej wszystkich elementów.
Na powyższym przykładzie zdefiniowano zakres wartości od 0 do 8 ze skokiem 2. Pierwsza akcja Goto powoduje przeskok do następnego elementu serii bez wykonania pozostałych akcji pętli jeśli zmienna %licznik ma wartość 4. Druga akcja Goto spowoduje przeskok do końca pętli jeśli zmienna %licznik ma wartość większą od 6. Jako wynik tego tasku otrzymamy tosty z wartościami kolejno 0, 2, 6, 8.

Pętla warunkowa Until...Loop

Pętla warunkowa Until pozwala na wykonanie pewnych akcji dopóki dana zmienna nie spełni założonego warunku. Tasker nie ma specjalnej akcji Until ale można ją zrealizować poprzez akcję Goto.

Dopóki zmienna %licznik będzie mniejsza od 12 akcja Goto będzie wykonywała przeskoki do akcji numer 2 czyli akcje pętli warunkowej będą powtarzane. Akcja Variable Add za każdym razem zwiększa zmienną %licznik o 3 (możliwe jest zdefiniowanie innej wartości w konfiguracji akcji). Gdy po czterech powtórzeniach pętli wartość zmiennej %licznik będzie wynosił 12, pętla zostanie zakończona.

Pętla warunkowa While...Loop

Pętla warunkowa While pozwala na wykonanie pewnych akcji w czasie gdy dana zmienna spełnia założony warunek. Tasker nie ma specjalnej akcji While ale można ją zrealizować poprzez akcje Goto i Stop.

W czasie gdy zmienna %licznik nie będzie równa 12 akcja Goto będzie dokonywała skoków do akcji Stop z etykietą pętla, która sprawdza warunek co spowoduje powtarzanie akcji pętli (Flash oraz Variable Add zwiększające wartość zmiennej o 3). Gdy zmienna %licznik osiągnie wartość 12, warunek zostanie spełniony i akcja Stop zatrzyma pętle warunkową oraz cały task.