Rekurencja w skryptach

 

Jedną z rzeczy, których brakuje w obecnym środowisku programistycznym Lumira Designer, to różnego rodzaju pętle. Możemy osiągnąć zbliżoną funkcjonalność korzystając z wbudowanego warunku if, globalnych funkcji oraz globalnych zmiennych, aby zaimplementować rekurencję.

 

W naszej aplikacji chcielibyśmy losować liczbę po naciśnięciu przycisku, ale w taki sposób, by nigdy nie wybrać dwóch takich samych wartości pod rząd. W tradycyjnym środowisku programistycznym, takie zadanie szybko udałoby się nam wykonać korzystając z pętli while lub wykorzystując funkcję rekurencyjną. Ze względu na to, że nie mamy dostępu do pierwszej opcji, skorzystamy z tej drugiej.

 

Tworzymy dwie globalne zmiennenumer, którabędzie przechowywać obecnie wylosowaną liczbę, oraz old_number która będzie przechowywać tą wylosowaną jako ostatnią (globalne zmienne to takie, które możemy wykorzystywać w każdym komponencie naszej aplikacji i której wartość zapisują się między nimi).

 

Aby przejść do globalnych zmiennych, należy zaznaczyć naszą aplikację korzystając z okna Outline, a następnie przejść do jej właściwości, dział Scripting, pole Global Scripts Variables.

 

 

Przy definiowaniu nowej zmiennej musimy ustalić jej typ, domyślną wartość oraz określić, czy można ją wykorzystać jako parametr URL (dzięki tej właściwości możliwe jest przekazanie wartości zmiennej korzystając z parametrów adresu internetowego).

 

Tworzymy nasze zmienne, nadajemy im typ float oraz tą samą wartość :

 

 

Następnie tworzymy globalną bezargumentową funkcję (sposób, w jaki można tego dokonać został nakreślony w ciekawostce nr 5). W moim przypadku nazwałem ją generate i będzie służyć do losowania nowej liczby oraz sprawdzania, czy różni się od ostatnio wybranej. 

 

// Sprawdzamy, czy nowa wartość jest taka sama, jak ta ostatnio wylosowana

if(picture == old_picture)

{

       // Generuj wartość

       varfirst_random = Math.random();

       // Sprowadź do formy całkowitej

       first_random = first_random * 10;

       // Zapisz do globalnej zmiennej

       number = Math.round(first_random);

       // Ponownie wchodzimy do naszej funkcji  

       GLOBAL_SCRIPTS_1.generate();

}

else

{

       // Nie wykonuj nic jeśli wylosowana wartość różni się od tej ostatnio wybranej

}

 

Następnie musimy dodać przycisk, który będzie wywoływał funkcję, a także wypełniał zmienną old_number. Przykładowy kod uruchamiany podczas jego naciśnięcia:

 

// Wywołujemy naszą funkcję

GLOBAL_SCRIPTS_1.generates();

// Wykorzystujemy naszą liczbę, np. wyświetlamy ją za pomocą elementu tekstowego

TEXT_1.setText(""+number);

// Zapamiętujemy wylosowany numer

old_number = number;

 

            

Jest to oczywiście tylko przykład – odpowiednie wykorzystanie rekurencji może zapewnić nam wiele innych ciekawych funkcjonalności!