Sense script

Struktury danych

<center>UWAGA! To jest bardziej zaawansowany artykuł dotyczący sense script!
Aby poznać podstawy sense script zapraszam do przeczytania artykułu sense script - Pierwsze kroki
</center>



<center>Struktury danych</center>

W sense script nie ma żadnych tablic, czy rekordów...

Jednak wciąż możesz ich używać!

Oto tutorial, który pokaże Ci jak używać tablic, czy rekordów w sense script!


<center>1. Dlaczego mogę używać Struktur danych?</center>

Możesz używać struktur danych, gdyż możesz załączać znaki takie jak ".", "/", "[" itp w nazwach zmiennych! sense script w tym zakresie jest bardzo elastyczny i pozwala na na prawdę wiele.


<center>2. Rekordy</center>

Stwórzmy nowy rekord! Nazwijmy go rec

Nasz rekord będzie zawierał imię, mail i płeć
Jak go utworzyć?

Jeżeli chcielibyśmy go tylko zadeklarować, to możemy napisać:
var(rec.name);
var(rec.mail);
var(rec.sex);


Lub jeżeli wolelibyśmy go od razu użyć, napiszemy:
set(rec.name, 'Jakub');
set(rec.mail, [email protected]');
set(rec.sex, 'M');


Teraz w bardzo prosty sposób możesz użyć ten rekord, np:
out('*[rec.name] ma e-mail *[rec.mail]');


I to wszystko o rekordach w sense script!


<center>Tablice</center>

Jedną z najważniejszych rzeczy w programowaniu są tablice.

Jak użyć ich w sense script? To tak jak z rekordami - po prostu używaj "[...}", lub "(...)". Przejdźmy do praktyki.

W naszym przykładzie stworzymy tablicę 1..2x1..2, wypełnimy ją i wyświetlimy.

Na początku ręcznie (można to również zrobić automatycznie) stwórz i wypełnij tablicę:
set(arr[1][1], '1');
set(arr[1][2], '2');
set(arr[2][1], '3');
set(arr[2][2], '4');

Teraz nasza tablica jest gotowa do użytku
Potrzebujemy ją tylko wyświetlić:

Najpierw spróbuj pokazać tylko wartość 1x2 używając zmiennej l:
set(arr[1][1], '1');
set(arr[1][2], '2');
set(arr[2][1], '3');
set(arr[2][2], '4');
 
set(l, 2);
 
out('*[arr[1][*[l]]]');


Błąd! Oto output:
<quote>Script start at time: 2009-05-05 09:08:08
*[arr[1][2]]
Script finish at time: 2009-05-05 09:08:08. Done in 15 ms.</quote>

Dlaczego tak się stało? Ponieważ sense script na początku szukał arr[1][2] - tego nie było w kodzie... Następnie kompilator szukał zmiennej l - ona w kodzie była

Dlatego też zmienna l musi być przez tablicą! Zmodyfikuj kod:
set(l, 2);
 
set(arr[1][1], '1');
set(arr[1][2], '2');
set(arr[2][1], '3');
set(arr[2][2], '4');
 
out('*[arr[1][*[l]]]');


lub jeszcze lepiej:

var(l);
 
set(arr[1][1], '1');
set(arr[1][2], '2');
set(arr[2][1], '3');
set(arr[2][2], '4');
 
set(l, 2);
 
out('*[arr[1][*[l]]]');


<center>Zadanie Domowe:</center>

Teraz spróbuj wykonać następujące ćwiczenie:

1. Twórz nową tablicę 1..5 wypleniając ją ręcznie

2. Używając funkcji math oraz repeat...until automatycznie pokaż wszystkie liczby 1-5 z tej tablicy

Zrób to sam!

Twók kod powinien być zbliżony do tego:
set(i, 1);
 
set(arr[1], '1');
set(arr[2], '2');
set(arr[3], '3');
set(arr[4], '4');
set(arr[5], '5');
 
repeat();             
out('*[arr[*[i]]];');
math(i, '*[i]+1');
until(*[i], 6);


A output taki:
<quote>Script start at time: 2009-05-05 09:16:44
1;
2;
3;
4;
5;
Script finish at time: 2009-05-05 09:16:44. Done in 31 ms.</quote>

Jeżeli Twój output jest podobny to umiesz już używać tablic.


<center>Tablica połączona z rekordem?</center>

Tak!
Możesz używać tablic rekordów (czyli tablic połączonych z rekordami)! Na przykład:
set(people[1].name, 'Jakub');
set(people[1].sex, 'M');
set(people[2].name, 'Martua');
set(people[2].sex, 'K');

Jest tablicą dwóch rekordów. To także możesz użyć w dowolny sposób.


<center>Nowe Struktury danych</center>

Ponieważ sense script jest bardzo elastyczny i nazwy zmiennych mogą być dowolnie "udziwniane" możesz używać swoich własnych Struktur danych.

Po prostu postępuj podobnie jak w przykładach z rekordami i tablicami, używając ich wg własnego upodobania - na przykład:
var(newstruct.name_:$fnd[x]:);

lub jakkolwiek inaczej - używaj ich wg własnych zapotrzebowań.

2 komentarze

nav 2009-05-05 11:12

Zamiast nazywac artykuły [kategoria]_Nazwa, skorzystaj z gotowego mechanizmu - /Kategoria/Subkategoria/Jeszcze_jedna_subkategoria/Artykuł. Wtedy nazwa tego artykułu brzmiałaby na przykład "/SenseScript/Struktury_Danych"