Składnia SAREscript

1. Podstawy

SAREscript jest językiem case sensitive, tzn. gdzie ważna jest wielkość liter. Komendy, funkcje i zmienne wymagają ich używania zgodnie z tym jak zostały zadeklarowane. Większość funkcji jest pisana małymi literami. Na przykład istnieje funkcja print ale nie ma Print, PRINT czy PrInT (gdyby istniały, to mogłyby to być zupełnie inne funkcje).

Wszystkie instrukcje, podobnie jak w wielu innych językach programowania, muszą być zakończone znakiem średnika ; na końcu każdego wyrażenie (linii). Brak takiego zakończenia nie zawsze spowoduje wystąpienie błędu, jednak tego skutki pominięcia znaku ; mogą być nieprzewidywalne.

2. Typy danych

Obecnie SAREscript używa następujących typów danych: NUMERIC (liczby), STRING (łańcuchy znaków), ARRAY (tablica), BOOL (logiczna prawda/fałsz) oraz specjalnego typu NULL. Liczby zmiennoprzecinkowe zapisujemy oddzielając część dziesiętną od całkowitej za pomocą kropki (np. 0.5 -2.123 1.0).

3. Łańcuchy znaków

Łańcuchy (string) możemy definiować za pomocą cudzysłowów " bądź apostrofów ' . Dostępny jest również, znany z PHP zapis heredoc. Łańcuchem zostanie wszystko, co znajdzie się pomiędzy cudzysłowem (bądź apostrofem) otwierającym a zamykającym. Przykłady: "To jest łańcuch" 'To też jest łańcuch' .

W przypadku użycia cudzysłowu, możemy korzystać w nim ze znaków specjalnych przez użycie znaku ucieczki \ (backslash). Przykładowo:

print("To jest pierwsza linia.\nTo jest druga linia.");

zostanie zamienione na:

To jest pierwsza linia.
To jest druga linia.

natomiast

print('To jest pierwsza linia.\nTo jest druga linia');

zostanie wyświetlone tak jak wpisano:

To jest pierwsza linia.\nTo jest druga linia.

Innym przykładem jest użycie znaku ucieczki \ celem zamaskowania znaku " wewnątrz łańcucha. Przykładowo takie użycie stringa zakończy się błędem:

print("<img src="http://jakisadresobrazka.gif">");

Aby tego uniknąć można zapisać:

print("<img src=\"http://jakisadresobrazka.gif\">");

Zapis heredoc przydatny jest przy definiowaniu dłuższych łańcuchów, np. fragmentów HTML. Użycie tego zapisu następuje poprzez zapisanie operatora <<< za którym bezpośrednio znajduje się identyfikator i znak nowej linii. Łańcuch zaczyna się w następnej linii i kończy kiedy wystąpi ten sam identyfikator, jak użyty na początku. Identyfikator zamykający musi zacząć się od pierwszej kolumny kodu i nie może w tej samej linii być żadnych innych znaków, jedynie opcjonalnie dopuszczony jest znak ;. Identyfikator może zawierać tylko litery, cyfry oraz znak _ (podkreślenie), ale musi zaczynać się od litery.

Przykładowo:

print(<<<EOT
<a href="http://www.sare.pl/">
<img src="http://www.sare.pl/logo.gif">
</a>
EOT
);

W przeciwieństwie do PHP, znak $ występujący w łańcuchach jest traktowany jako zwykły znak, a nie jako początek zmiennej. To znaczy, że podczas parsowania łańcuchów nie zamienia się występujących w łańcuchach odwołań do zmiennych na ich wartości.

SAREscript pracuje w kodowaniu UTF-8 i w takim kodowaniu przechowuje wszystkie łańcuchy.

4. Zmienne

SAREscript umożliwia używanie dowolnej liczby zmiennych. Nazwa zmiennej rozpoczyna się od znaku dolara $ , za nim litery (bez znaków narodowych) i opcjonalnie kolejnych znaków spośród liter, cyfr lub znaku podkreślenia _. Poprawną nazwą zmiennej będzie np.: $moja_zmienna2 , ale już nie $2moja_zmienna.

Dostępne są również zmienne tablicowe (tablice). Tablice pozwalają na dostęp do wartości w nich przechowywanych z wykorzystaniem klucza. Klucz może być typu NUMERIC lub STRING. Tablice są tworzone jako wynik działania funkcji (np. array()), bądź poprzez przypisanie elementowi tablicy (wskazanemu przez klucz) dowolnej wartości (w tym innej tablicy):

$zmienna[klucz] = wartość

Przykładowo wszystkie poniższe deklaracje są poprawne i zmienna $liczby jest zmienną tablicową:
$liczby = array("zero", "jedynka");

$liczby[1] = "jedynka";

$liczby["jedynka"] = 1;

Zastrzeżonym kluczem tablicy jest słowo “SYSTEM”. Tablica ta zawiera informacje o systemie i dlatego ten klucz nie może być używany.

Jeżeli nie zaznaczono inaczej, większość funkcji które zwracają w wyniku działania tablice, indeksuje te tablice od zera (pierwszy element tablicy ma indeks 0).

5. Operatory i wyrażenia

Obecnie SAREscript obsługuje następujące operatory:

a) arytmetyczne

Nazwa Operator Przykład Wynik operacji
negacja - -$a Zanegowanie zmiennej $a. Równoważne ($a * -1)
dodawanie + $a + $b Suma $a i $b
odejmowanie - $a - $b Różnica $a i $b
mnożenie * $a *$b Iloczyn $a i $b
dzielenie / $a / $b Iloraz $a i $b
dzielenie modulo % $a % $b Reszta z ilorazu $a i $b

b) przypisania

Nazwa Operator Przykład Wynik operacji
przypisanie = $a =$b Zmienna $a przyjmie wartość $b

 

c) inkrementacji/dekrementacji

Nazwa Operator Przykład Wynik operacji
inkrementacja ++ $a++ Zmienna $a zwiększy swoją wartość o 1
dekrementacja $a Zmienna $a zmniejszy swoją wartość o 1

d) porównania

Nazwa Operator Przykład Wynik operacji
równe == $a ==$b Prawda jeżeli $a jest równe $b
różne != $a != $b Prawda jeżeli $a jest różne od $b
równe dokładnie === $a ===$b Prawda jeżeli $a jest równe $b i są tego samego typu
różne dokładnie !== $a !== $b Prawda jeżeli $a jest różne od $b lub są innych typów
większe > $a > $b Prawda jeżeli $a jest większe od $b
mniejsze < $a < $b Prawda jeżeli $a jest mniejsze od $b
większe równe >= $a >= $b Prawda jeżeli $a jest równe lub większe od $b
mniejsze równe <= $a <= $b Prawda jeżeli $a jest równe lub mniejsze od $b

e) logiczne

Nazwa Operator Przykład Wynik operacji
lub or $a or$b Prawda jeżeli $a jest prawdą lub $b jest prawdą
i and $a and $b Prawda jeżeli $a jest prawdą i $b jest prawdą

f) łańcuchowe

Nazwa Operator Przykład Wynik operacji
łączenia . $a .$b Połączone łańcuchy $a i $b

Priorytety operatorów (od góry najwyższe):

++ –
negacja
* / %
+ – .
< > >= <=
== != === !==
=
or
and

6. Struktury kontrolne

Struktury kontrolne są jednym z najważniejszych elementów SAREscript. Dzięki nim możliwe jest warunkowe wykonywanie określonych elementów kodu. Podstawową strukturą, podobnie jak w innych językach programowania, jest if.

if (wyrażenie) {
kod_do_wykonania
}

Jeżeli wyrażenie jest prawdą, zostanie wykonany kod zawarty pomiędzy nawiasami. Przykład:

if ($plec == "M") {
print("Szanowny Panie");
}

Dodatkowe możliwości stwarza zastosowanie else.

if (wyrażenie) {
kod_do_wykonania
} else {
alternatywny_kod_do_wykonania
}

Jeżeli wyrażenie jest prawdą, zostanie wykonany kod_do_wykonania, natomiast jeżeli będzie fałszem wykonany zostanie alternatywny kod_do_wykonania. Przykład:

if ($plec == "M") {
print("Szanowny Panie");
} else {
print("Szanowna Pani");
}

SAREscript pozwala również na stosowanie elseif, które jest połączeniem else i if

if (wyrażenie1) {
kod_do_wykonania1
} elseif (wyrażenie2) {
kod_do_wykonania2
} elseif (wyrażenie3) {
kod_do_wykonania3
} else {
kod_do_wykonania4
}

Jeżeli wyrażenie1 jest prawdą, zostanie wykonany kod_do_wykonania, natomiast jeżeli będzie fałszem sprawdzone zostanie wyrażenie2. Jeżeli to wyrażenie również będzie fałszem, sprawdzane będą kolejne wyrażenia przy elseif aż do skutku. Jeżeli żadne z wyrażeń nie będzie prawdą, to wykonany zostanie blok else (o ile został zdefiniowany). Przykład:

if ($wiek < 21) {
print("Cześć");
} elseif ($wiek < 50) {
print("Witam");
} else {
print("Dzień dobry");
}

Struktury mogą być zagnieżdżone.

Jeżeli jako wyrażenie dla if występują wyrażenia wymagające wcześniejszego wykonania (obliczenia), to wszystkie zostaną wykonane, niezależnie od tego czy są konieczne. Np.:

if (wyrażenie1 or wyrażenie2)

W przypadku kiedy wyrażenie1 zwróci false, to i tak zostanie wykonane wyrażenie2 (chociaż nie ma już wpływu na wynik całości sprawdzenia, które i tak będzie false). Jest to inne działanie niż np. w PHP.

7. Pętle

Pętla FOR pozwala na wywołanie określonego fragmentu skryptu więcej niż jeden raz. Składnia wygląda następująco:

for ($zmienna = start to stop) {
kod do wykonania
}

Start to początkowa wartość zmiennej $zmienna, zaś stop to wartość końcowa. Jeżeli wartość start będzie mniejsza od stop, podczas każdego kroku wartość zmiennej jest zwiększa o jeden do czasu kiedy wartość zmiennej $zmienna będzie równa (bądź większa) wartości zdefiniowanej jako stop. W przypadku kiedy na początku wartość start jest większa od stop, zmienna $zmienna będzie w każdym kroku zmniejszana o jeden, aż jej wartość będzie równa bądź mniejsza od stop. Jeżeli start i stop będą sobie równe, kod zostanie wykonany dokładnie jeden raz.

Parametr $zmienna nie może być zmienną tablicową.

Przykład:

for ($licznik = 1 to 5) {
print($licznik." razy ".$licznik." równa się ".($licznik*$licznik)."\n");
}

Wynikiem działania będzie:

1 razy 1 równa się 1
2 razy 2 równa się 4
3 razy 3 równa się 9
4 razy 4 równa się 16
5 razy 5 równa się 25

Przykład:

for ($licznik = 5 to 1) {
print($licznik." razy ".$licznik." równa się ".($licznik*$licznik)."\n");
}

Wynikiem działania będzie:

5 razy 5 równa się 25
4 razy 4 równa się 16
3 razy 3 równa się 9
2 razy 2 równa się 4
1 razy 1 równa się 1

8. Rejestry

SAREscript posiada możliwość zdefiniowania zmiennych globalnych dla systemu zwanych rejestrami. Rejestry są polami w bazie, do których można odwoływać się poprzez ich nazwę. Nazwa rejestru może mieć maksymalnie 255 znaków. W jednym rejestrze można przechowywać łańcuchy znaków o maksymalnej długości do 1023 znaków lub 16777215 (16 MB) w przypadku rejestrów typu BIG.

9. Funkcje

Funkcje pozwalają na przekazanie im parametru. Zwracają wynik swojego działania. Obecnie SAREscript oferuje funkcje, które są specyficzne dla systemu e-mailingowego, jak również odpowiedniki funkcji PHP. Oprócz podstawowych funkcji (np. print()), są również zaawansowane funkcje, które operują na dużej liczbie danych (np. pl_imiewolacz()). Zwiększanie liczby dostępnych funkcji będzie głównym kierunkiem rozbudowy SAREscriptu. Szczegółowy opis funkcji znajduje się tutaj.

Możliwość komentowania jest wyłączona.