Az Io programozási nyelv

Szabványos könyvtárak

Fájl és könyvtár kezelés

Az Io programozási nyelvben a fájlkezelés támogatására és használatára vezették be a File nevű objektumot, ami megvalósítja az összes fontosabb műveletet. Az előbbi mellett szintén bevezetésre került a Directory nevű objektum, amivel a könyvtárstruktúrát tudjuk bejárni és manipulálni.

Directory objektum

A Directory objektummal férhetünk hozzá a fájlrendszer könyvtáraihoz. Az elérési utak kezelése az Unix világból megszokott módon történik. Az elérési útvonal „/” jellel kezdődik, akkor az a gyökér könyvtárat jelöli, míg ha „./” jelekkel kezdődik, akkor a program hívási helyének felel meg. Nem jelöljük külön, akkor automatikusan „./” jeleket használja fel.

A directories függvény az elérési útvonalon található könyvtárakat listázza ki, a hívó egy listát kap vissza.

Egy könyvtárban jelenlévő fájlokat a files függvénnyel kérdezhetjük le, szintén egy listával tér vissza, amiben File objektumok találhatóak.

Az exists(optionalPath) függvénnyel azt vizsgálhatjuk, hogy a megadott opcionális útvonalon létezik-e könyvtár.

Könyvtárak között a setPath(path) függvénnyel navigálhatunk. A jelenlegi helyzetünket a könyvtár struktúrában a path függvénnyel kérdezhetjük le.

A create függvénnyel könyvtárakat hozhatunk létre, ha még nem léteznek. Önmagával tér vissza sikeres létrehozás esetén vagy ha a könyvtár már létezik. Hiba esetén nil értéket ad vissza. Törölni könyvtárakat a remove függvény segítségével tudunk. Könyvtárakat a moveTo(path) függvénysegítségével tudunk mozgatni.

A könyvtárban található elemek számát a size függvénnyel kérdezhetjük le. Eddig csak olyan függvényt említettünk meg, ami külön külön adta vissza a könyvtár elemeit aszerint, hogy könyvtár-e vagy fájl-e. Az előző két halmaznak az unióját adja meg az items nevű függvény.

File objektum

Korábban már említettünk, hogy a fájlok kezelésére a File objektumot használhatjuk.

Más nyelvekben már megszokhattuk, hogy a fájlokat különbözőképpen nyithatjuk meg: hozzáfűzésre, olvasásra és frissítésre. Hasonló lehetőségeket kínál az Io nyelv is.

Az openForAppending(optionalPath) hozzáfűzésre nyitja meg a fájlt, vagyis a fájl végére írhatunk újabb információkat. Az openForReading(optionalPath) nevű függvény olvasásra nyitja meg a fájlt, vagyis nem lesz írható a fájl. Előzőek kombinációja az openForUpdating(optinalPath) függvény, amellyel olvashatjuk és írhatjuk is a fájlt.

Új fájlokat a create nevű függvény segítségével tudunk létrehozni. Önmagával tér vissza vagy nil objektummal a függvényhívás a futási eredménytől függően. Emellett temporaryFile függvény segítségével ideiglenes fájlokat hozhatunk létre, melyek automatikusan törlésre kerülnek, ha a File objektum bezárta vagy a szemétgyűjtő törölte az objektumot.

A fájlok tartalmát végig iterálhatjuk illetve egy szekvenciában is megkaphatjuk. Az utóbbira a contents nevű függvény való, míg az előbbire a foreach(optionalIndex, value, message) és a foreachLine(optionalLineNumber, line, message) függvények valók. A foreach függvény minden value-nyi bájtra végrehajtja a message-et. A foreachLine a fájl minden sorára végrehajtja a message-et.

A műveleteik során arra a választ, hogy a fájl végén vagyunk-e már a isAtEnd függvény adja meg. Míg a fájl újbóli elejére ugrását a rewind függvény oldja meg.

Fájlokat a könyvtáraknál megismert módon mozgathatjuk, törölhetjük: create, remove, moveTo.

Dátumok

Dátumok kezelésére a Date objektumon keresztül van lehetőség. Ez az objektum az összes fontosabb tulajdonsággal fel van ruházva, amivel könnyen konvertálhatunk dátumokat időzónák között. Az utóbbi tulajdonság kimondottan hasznos, ha már tapasztaltuk azt, hogy egy több lokalizációval rendelkező szoftverfejlesztésekor a megfelelő időkezelés mennyi problémát és fejfájást okozhat a fejlesztőnek.

Az objektumban reprezentált dátumot a print függvény segítségével írathatjuk ki, aminek a formátumát a format függvény befolyásolja. Az alapértelmezett formátum a következő: „%Y-%m-%d %H:%M:%S %Z”.

A dátum formázás a C-ben jól megszokott konvenciókat követik:

Az időt lekérdezhetjük úgy, ahogy az RFC4287 definiálja. Erre való az asAtomDate nevű függvény.

Io> Date asAtomDate
==> 2012-06-07T14:49:34+02:00

1970-től eltelt másodpercek számát az asNumber függvénnyel kérdezhetjük le.

Io> Data asNumber
==> 1339091974.7361149787902832

Egyes időzónák közötti konvertálást a convertToZone(offset, isDST) függvénnyel oldhatjuk meg, míg UTC-be konvertálni a convertToUTC függvénnyel tudunk.

A Date objektum egyes mezőit lekérdezhetjük egyenként a következő függvényekkel: zone, year, month, day, hour, minute, second. Hasonló módon változtathatjuk meg az egyes mezőit: setHour(number), setMinute(number) stb.

A dátumhoz hozzáadhatunk egy számot és ki is vonhatunk belőle. Erre szolgálnak a következő műveletek:

Véletlen szám generálás

Véletlen számokat a Random objektumon keresztül generálni. Az objektum a Mersenne Twister algoritmust valósítja meg.

Véletlen szám generátoroknál be lehet állítani tetszőleges „kezdőértéket”, amiből indulva generálja a véletlen számokat. Az alapértelmezett kezdőértéket a C time és clock függvények kizáróvagyolása adja. Ezt természetesen átállíthatjuk általunk választottra a setSeed(number) függvény segítségével.

Többféleképpen kérhetünk többfajta típusú véletlen számokat a generátortól.

Lehetőségünk van Gauss eloszlású véletlen számokat kérni a gaussian(optionalMean, optionalStandardDeviation) függvény segítségével, ami 0 és 1 között véletlen számokkal tér vissza.

A value(optArg1, optArg2) függvénnyel értékhatárokat definiálhatunk és azokon belül generál számunkra számokat:

Lehetőség van véletlen igaz, hamis értékek generálására is a flip függvény segítségével.

A bytes(cnt) függvény segítségével pedig cnt-nyi mennyiségű véletlen bájtokat lehet generáltatni.

MySQL adatbázis kezelése

A nyelv lehetőséget ad arra, hogy MySQL adatbázisokat kezelhessünk. A MySQL gyors, többszálú, több felhasználós SQL adatbázis szerver.

Egy rövid példa programot olvashatunk a következőkben:

my := MySQL establish(„localhost”, „user”, „password”, „database”) my queryThenMap(„SELECT * FROM table”) foreach(at(„col”) println) my query(„SELECT * FROM table”) foreach(at(0) println) my close

A példa program egy adatbázis kapcsolatot hoz létre, mely segítségével két lekérdezést futtatunk le a jól ismert SQL lekérdező nyelv segítségével. Végül bezárja a kapcsolatot.

Kapcsolatot két függvénnyel is létesíthetünk adatbázis szerverekkel: establish és a connect.

Az adatbázis lekérdezés eredménye lehet egy lista vagy egy asszociatív tömb. A query(sqlQuery) egy listával tér vissza, míg a queryThenMap(sqlQuery) függvény egy asszociatív tömbbel. Az sqlQuery tetszőleges SQL lekérdezés lehet.

Adatbázis kapcsolatot a close függvénnyel tudunk bezárni.