Az ELASTIC programozási nyelv

Vezérlési szerkezetek

Operátorok

Az értékadás operátora itt is az =, de minden aritmetikai operátorra értelmezve van az értékadással összevont formája.

 
        //Ha OP egy tetszőleges aritmetikai operátor
        a  = a OP b;   //      ekvivalens az
        a OP= b;       //      kifejezéssel.

Léteznek a C/C++ -ban megszokott inkrementáló (++), dekrementáló (--) operatorok. Működésük teljesen megegyezik a C/C++ -beli működéssel. Ugyan így létezik a feltétel operator is.

 
        e1 ? e2 : e3

Ennek az operátornak a működése teljesen megegyezik a C/C++ -ban találhatóval, tehát e1 kifejezés kiértékelődik, és ha az eredmény @true akkor e2, ha @false akkor e3 hajtódik végre.
Létezik a nyelvben egy úgynevezett szekvencia operátor, amelyet az in kulcsszó jelöl.

 
        "red" in #[1, 2, "green", "yellow", "red"];

Ennek a kifejezésnek az értéke igaz, mert a "red" eleme a jobboldalnak. Az in kulcsszónak van egy kicsit módosított jelentése is, amellyel majd a for ciklust alakíthatjuk foreach szerkezetté.

Blokkok

A nyelv blokkszerkezetű, a blokkokat nyitó és záró kapcsos közé kell elhelyezni, mint C/C++ -ban.

Elágazások

 
    if (expression)
        statement-1
    [ else
        statement-2 ]

A C/C++ -ból megszokott if elágazás írására van itt is lehetőség, és a csellengő else problémáját is ugyan azzal a módszerrel oldja meg, mégpedig az else-t az utolsó if-hez ragasztja. Sajnos a nyelvben nincsen külön vezérlési szerkezet a többágú elágazásokra (lásd C/C++ switch), így ezeket muszáj if else szerkezetekkel szimulálni.

 
    if (expression)
        statement-1
    else if (expression-2)
        statement-2
    else if (expression-3)
        statement-3
    ...
    else
        statement-N

Ha egy értéket logikai kifejezésben használunk, akkor az érték @true-vá konvertálódik, kivéve a @false, a @nil és az egész 0 értékeket, amelyek @false ként viselkednek. A logikai operatorok kiértékelése rövidzáras algoritmussal történik.

 
        if(@false && sosemfut())              // pelda a rövidzáras és operátorra,
        {                                     // a sosemfut() függvényre, mint a neve is mutatja, sosem kerül a vezérlés
        }
        else
        {
        }

Ciklusok

A jól megszokott cikluskonstrukcióink itt is rendelkezésre állnak. Írhatunk while, do while, for, ciklusokat.

 
        while (expression)
               statement
 
        for (init; test; update)
               statement

Ez utóbbi ekvivalens a következővel.

 
    init;
    while (test)
    {
        statement
        update;
    }

A for ciklus és az in kulcsszó segítségével készíthetünk foreach szerkezetet is.

local state;
local states = #["Italy", "England", "France", "Germany", "Spain"];
 
    for (state in states)
    {
        basic.print( state, '\n' );
    }   
Ezzel a vezérlési szerkezettel végigiterálhatunk, tetszőleges tömb típusú objektumokon, akkor is ha a tömb nem csak skalárokat tartalmaz.

A do while szerkezet is a megszokott alakú.

 
    do
        statement
    while (condition); 

A nyelv tartalmazza a goto feltétel nélküli vezérlésátadó utasítást, de használata nem javasolt. Emellett tartalmaz a nyelv egy másik, barátságosabb ugró utasítás a break-et, amivel a ciklusmag bármely pontjáról kiugorhatunk, a ciklus utáni utasításra. A breaknek megadhatunk opcionálisan egy paramétert, amivel jelölhetjük hogy hány szintnyit akarunk ugrani felfelé.

 
    local i, j;
    for (i = 0; i < 10; i = i + 1)
    {
        for (j = 0; j < 10; j = j + 1)
        {
            if (i == 5) break 2;
        }
    }
 
    basic.print( "i = ", i, ", j = ", j, '\n' );     

A kód végrehajtásának eredményeként a következő sort kapjuk.

 
    i = 5, j = 0