Az Euphoria Programozási nyelv (v2.3)

Típusok, típuskonstrukciók

Elemi típusok

Karakter Stringek és Önálló Karakterek

A karakter string egy sorozata a karaktereknek. Ez idézőjelben lehet megadni. Pl.

        "ABCDEFG"

A karakter stringet úgy lehet kezelni és műveleteket végezni vele, mit bármely más sorozattal. Például a fenti string teljesen azonos az alábbi sorozattal:

        {65, 66, 67, 68, 69, 70, 71}

amelyik tartalmazza a megfelelő ASCII kódokat. Az Euphoria fordító rögtön konvertálja "ABCDEFG"-t a fenti számok sorozatára. Bizonyos értelemben nincsenek "stringek" az Euphoria-ban, csak számok sorozata. Az idézőjeles string az valójában csak kényelmes jelölés, ami megkímél az összes ASCII kód begépelésétől.

"" egyenlő {}. Mindkét reprezentáció a 0-hosszú sorozat, azaz az üres sorozat. Mindkét jelölés használható, az "" általában a 0-hosszú karakter sorozatra használjuk, míg a {} más üres sorozatokra.

Az önálló karakter egy atom. Az önálló karakter az egy atom. Aposztróf jelek között lehet megadni. Az önálló karakter (amelyik atom) és a karakter az 1-hosszú karakter string (amelyik sorozat) különbözik egymástól. Pl.:

        'B'   -- equivalent to the atom 66 - the ASCII code for B

        "B"   -- equivalent to the sequence {66}

'B' csak egy jelölés, ami egyenlő a 66 begépelésével. Nincs valójában "karakter" az Euphoria-ban csak szám (atom).

Fontos, hogy az atom nem azonos avval az egy-elemű listával amelyik ugyanazt az értéket tartalmazza, bár van néhány beépített eljárás ami azonosként kezeli őket.

Speciális karakterek amiket \ után írunk:

        \n        újsor

        \r        kocsi vissza

        \t        tab

        \\        backslash

        \"        idézőjel

        \'        aposztróf jel

Sorozatok

Sorozat Létrehozása

A sorozat létrehozásához, kapcsos zárójelet és vesszőt használunk:

        {a, b, c, ... }

ez is egy operátor, aminek n operandusa van, ahol n értéke 0 vagy több. Ez az operátor egy n-elemű sorozatot készít a megadott értékekből pl:
        x = {apple, orange*2, {1,2,3}, 99/4+foobar}

A sorozat egy elemét kiválaszthatjuk, ha megadjuk az elem sorszámát szögletes zárójelben. Az elemek számozása 1-gyel kezdődik. A nem-integer indexeket az interpreter lefelé kerekíti integerré.

Pl. ha x = {5, 7.2, 9, 0.5, 13} akkor  x[2] az 7.2. Feltételezve hogy nem rendeltünk közben mást  x[2]-höz :

        x[2] = {11,22,33}

akkor x egyenlő lesz  {5, {11,22,33}, 9, 0.5, 13}. Ha most kérdezzük meg  x[2] értékét, azt kapjuk , hogy {11,22,33} és ha azt kérdezzük  x[2][3] a  33 atomot kapjuk. Ha olyan számmal próbálsz indexelni egy sorozatot, ami kívül esik az 1 és elemek száma számmal tartományból, akkor index hibát fogsz kapni.  Például x[0], x[-99] vagy x[6] hibát okoz.  Akkor is hiba üzenet kapunk ha az  x[1][3] értékét kérdezzük és  x[1] nem sorozat.  Nincs korlátozva egy változót követő indexek száma, de a változónak a kellő mélységben tartalmaznia kell sorozatokat. A két dimenziós tömb, amely más nyelvekben megszokott, könnyen reprezentálható sorozatok sorozatával

        x = {

             {5, 6, 7, 8, 9},      -- x[1]
             
             {1, 2, 3, 4, 5},      -- x[2]

             {0, 1, 0, 1, 0}       -- x[3]
             
            }

ahol a számokat úgy írhatjuk, hogy világos struktúrát kapjunk.  x[i][j] kifejezéssel elérhetjük bármely elemet.

A két dimenzió nem szimmetrikus mivel egy egész "sor" kiválasztható az x[i]-vel, de nincs hasonlóan egyszerű kifejezés, egy teljes oszlopot kiválasztására. Könnyen és rugalmasan készíthetünk más logikai struktúrák, mint n-dimenziós vektor, stringek vektora, struktúrák, struktúrák vektora, stb.

 3-D array:

        y = {

             {{1,1}, {3,3}, {5,5}},

             {{0,0}, {0,1}, {9,1}},

             {{-1,9},{1,1}, {2,2}}

            }

y[2][3][1] is 9

Stringek vektora:

        s = {"Hello", "World", "Euphoria", "", "Last One"}

s[3] is "Euphoria"
s[3][1] is 'E'

Egy  struktúra:

        employee = {

                    {"John","Smith"},

                    45000,

                    27,

                    185.5

                   }

Egy struktúrában egy "mezők" vagy elemek elérésére készítünk konstansok halmazát, melyek a változó mezők nevei. Ez könnyen olvashatóbbá teszi a programot. Pl.
        constant NAME = 1

        constant FIRST_NAME = 1, LAST_NAME = 2



        constant SALARY = 2

        constant AGE = 3

        constant WEIGHT = 4

A személy nevét el tudod érni employee[NAME]-mel, vagy ha vezeték nevet is használod, akkor employee[NAME][LAST_NAME]-mel.

Struktúrák vektora:

        employees = {

                     {{"John","Smith"}, 45000, 27, 185.5},   -- a[1]

                     {{"Bill","Jones"}, 57000, 48, 177.2},   -- a[2]



                     -- .... etc.

                    }

employees[2][SALARY] would be 57000.

Az Euphoria adat struktúrája nagyon rugalmas. Az Euphoria adat struktúrája nagyon rugalmas. Más nyelvekben a vektoroknak előre meghatározott elemszáma van, és minden elemének egyforma típusa kell legyen. Az Euphoria mellőzte ezeket a megszorításokat. Könnyen adható új struktúra a fenti employees sorozathoz. Szokatlanul hosszú neveket is tárolhatunk a NAME mezőben. Lehet különféle elemeket, különböző méretben tárolni egyetlen egy sorozatban.

Megjegyzés: kifejezést nem lehet indexelni, csak változót. Pl:  {5+2,6-1,7*8,8+1}[3] nem lehetséges,  date()[MONTH] sem. Először hozzá kell rendelni egy változót a date() által visszaadott sorozathoz, ezután már lehet indexelni, hogy megkapjuk a hónapot.