Az elastiC programok alapvető fordítási egysége a csomag (package). Egy csomag felépítése:
package csomagnév;
//import rész:
import basic; //basic csomag importálása
//utasítások, deklarációk:
public function hello()
{ basic.print("Helló világ\n");return 0;
}
hello();
Mint látható, egy csomag két fő részből áll: az elsőben az import kulcsszóval jelezzük, hogy egy másik csomag szolgáltatásait használni akarjuk. Ezután következnek a deklarációk és utasítások, tetszőleges sorrendben. Lényeges különbség a C/C++ vagy Java nyelvhez képest, hogy nincs egy speciális nevű függvény (main), amit az interpreter a program indításakor végrehajt, hanem a forrásfájl maga képezi a legkülső programblokkot.
A csomagok legfelső szintjén deklarált változókat (azaz nem egy függvény vagy osztály belsejében) két féle láthatósággal deklarálhatunk: public vagy private. A public kulcsszóval deklarált változók más csomagokból is láthatóak, míg a private kulcsszóval deklaráltak csak a csomagon belülről.
public function hello()
{
basic.print( "Hello világ!\n" );
}
private function how()
{
basic.print( "Hogy vagy?\n" );
}
public hello;
hello = function()
{
basic.print( "Hello világ!\n" );
};
private how;
how = function()
{
basic.print( " Hogy vagy?\n" );
};
function negyzet_szamolas()
{
static val = 0; // a statikus változó
local v; // a lokális változó
val = val + 1;
v = val * val;
basic.print( v, '\n' );
}
negyzet_szamolas ();
negyzet_szamolas ();
negyzet_szamolas ();
1
4
9
Láttuk, hogy a függvények objektumok, ugyanúgy mint az egész vagy lebegő pontos számok, vagy bármi más, így kiderült hogy a következő kód helyes:
function trunky()
{
local funky;
funky = function() {
basic.print( "BUH !\n" );
}
funky();
}
package trunky;
import basic;
function trunky()
{
local funky;
local v;
v = 5;
funky = function() {
basic.print( v, '\n' );
};
funky();
}
trunky();
Az eredmény:
5
De most felmerülhet a kérdés, hogy mi történik, ha valami ilyesmit csinálunk:
package furcsa;
import basic;
function trunky()
{
local funky;
local v;
v = 5;
funky = function() {
basic.print( v, '\n' );
};
// visszaadjuk a funky változóban tárolt függvényt
return funky;
}
local func;
func = trunky();
// a func a trunky() által visszaadott függvény...
// ... hívjuk meg !
func();
Mi történik? Egy függvényt hívunk, ami egy olyan változóra hivatkozik, ami a készítésekor volt aktív, és nyilvánvalóan nem aktív a hívása idején.
Az erdemény:5
Ez azért van, mert a rendszer megengedi az ilyen programozási stílust, Ez az a változó élettartam kivétel, amit említettünk. A szabály intuitív módon definiálható: a változók aktívak maradnak az egész időre, amíg szükségesek lehetnek egy számításhoz.
Vannak még más láthatósági szabályok, amikről az objektum orientáltság témakörben lesz szó.
A nyelv a fordító és az interpreter mellett tartalmaz néhány hasznos csomagot is. Mivel ezek dokumentálatlanok, ezért csak a nevükből következtethetünk a szerepükre.
basic
sys
math
string
list
array
re