Karakterláncok (Strings)
A karakterlánc tulajdonképpen bármilyen szöveg lehet, amelyet idézôjelek közé zártunk. Az idézôjel lehet " vagy ' is, azonban egy adott karakterlánchoz vagy az egyik, vagy a másik fajtát kell használni. Ha a karakterlánc már tartalmaz idézôjelet, akkor a kezdéshez és záráshoz a másik fajtát kell alkalmazni, vagy a láncban szereplô idézôjelet meg kell duplázni. A REXX pontosan úgy tárolja el a karakterláncokat, ahogyan azok az idézôjelek között szerepelnek, így pl. megtartja a kis és nagybetûket is. Lehetséges üres karakterlánc megadása is. A karakterláncok az állandók körébe tartoznak, mivel a program nem változtatja meg értéküket. Az alábbiakban néhány példát láthatunk:
| Karakterlánc: | A REXX által eltárolt érték: |
| "Ez az elsô karakterlánc!" | Ez az elsô karakterlánc! |
| 'Ez a második karakterlánc!?' | Ez a második karakterlánc!? |
| 'A következô egy üres string:' | A következô egy üres string: |
| "" | |
| "Ezért az eltárolt érték is üres." | Ezért az eltárolt érték is üres. |
| 'Let''s see something more difficult!' | Let's see something more difficult! |
| """Igyon má' valamit Józsi bá'"" mondta Pista." | "Igyon má' valamit Józsi bá'" mondta Pista. |
Számok
A számok speciális karakterláncok a REXX-ben. Ugyanúgy használhatjuk ôket, mint a többi karakterláncot, ugyanakkor matematikai mûveletekben is részt vehetnek. A számok köré nem kötelezô idézôjeleket sem tenni. Kezdôdhetnek és végzôdhetnek szóközkarakterekkel is, ám ekkor az idézôjel már nem maradhat el. A REXX-ben három fajta számot különböztetünk meg:
Egész számok/integer (nincs törtrész), pl. -1, 34, 0, -834434, ' + 567'
Lebegôpontos számok/float (van törtrész), pl. 3.1415, -76.87, +0.4567, .678
Exponenciális számok, pl. 1.034e4, 3.67E6, -1.56e23
Változók
A programok sokszor dolgoznak olyan adatokkal, amelyek a futás alatt folyamatosan változnak, vagy amely adatok értéke a program írásakor még nem is ismert. A változók megadásakor azt közöljük a programmal, hogy foglaljon le helyet a számítógép memóriájában a késôbb feldolgozásra kerülô adatoknak. A változókra a nevük megadásával lehet hivatkozni, amely (a tárolt adattól eltérôen) sohasem változik. A REXX-ben a változókat nem kell elôre definiálni, ugyanis ez automatikusan megtörténik az elsô értékadáskor:
példaváltozó = 1.71
A példában szereplô változó értéke tehát jelen pillanatban 1.71. Amikor új értéket rendelünk a példaváltozóhoz, akkor az elôzô érték elveszik.
Változónevek
A változók neve nem lehet akármi. REXX-ben a következô szabályokat kell betartanunk a név kiválasztásakor:
- A név elsô karaktere betû, aláhúzás (underscore), felkiáltójel, vagy pedig kérdôjel kell, hogy legyen.
- A név többi karaktere tartalmazhat számokat, betûket, aláhúzást, kérdô-, vagy felkiáltójelet.
- A kis és nagybetûk alapján a REXX nem tesz különbséget, ezért pl. a Pista változó az ugyanaz, mint a pista, vagy a pistA.
- Elvileg a REXX utasítások neveit is használhatjuk változónévként, ezt a lehetôséget azonban inkább ne használjuk ki.
Néhány helyes és helytelen változónév:
test1 /* helyes */ AzEnValtozom /* helyes */ 1valtozo /* helytelen, számmal kezdôdik */ if /* helyes, bár nem ajánlott */ gyerunk! /* helyes */ most_mi_van? /* helyes */ test#1 /* helytelen, # nem szerepelhet */
Amíg egy változónak nem adunk értéket, addig a REXX a változó nevét tárolja el, csupa nagybetûvel. Ha elfelejtünk egy karakterlánc köré idézôjeleket tenni, akkor a REXX a karakterláncot változónak fogja tekinteni:
/* Példa nem inicializált változók használatára */ SAY "Hello World!" SAY Hello World! Hello = 'Goodbye' SAY Hello World! EXIT
A futtatáskor a Hello World! üzenetet látjuk viszont elôször, ami a karakterlánc korrekt definiálása miatt pontosan úgy jelenik meg, mint ahogy azt begépeltük. A következô sorban a két (Hello és World!), nem inicializált változó jelenik meg, csupa nagybetûvel: HELLO WORLD! A harmadik SAY utasítás végrehajtásakor a Hello változónak már van értéke (Goodbye). A World!-nek viszont még mindig nincs, így a kimenet ebben az esetben a Goodbye WORLD! lesz.
Bár nem kötelezô, azért mégis törekedjünk olyan változónevek használatára, amelyek a változó szerepére utaló jelentéssel bírnak. (A késôbbiekben ez ugyanis nagyon megkönnyíti majd programunk újbóli megértését.) Két fajta gyakran használt névadási konvenció ismert. Az egyik aláhúzás-karakterekkel választja el a névben a szavakat (pl. kis_pista_autoinak_szama), a másik ugyanakkor nagy betûkkel kezdi a szavakat (KisPistaAutoinakSzama). Az utóbbi rendszert teverendszernek is hívják, mivel a nagy betûk a teve púpjaihoz hasonlóan emelkednek ki a kis betûk közül.
Adattípusok
Más programozási nyelvektôl eltérôen a REXX-ben egyetlen változótípus létezik, a karakter (karakterlánc). Ez a megközelítés általában megkönnyíti a programozást, ugyanakkor egy külön függvény végrehajtására van szükség, ha meg akarjuk tudni, hogy milyen fajta adat van egy adott változóban eltárolva. Az erre a feladatra létrehozott (beépített) REXX függvény a Datatype:
Datatype( karakterlánc, [típus] )
Ha a típus megadása nélkül hívjuk meg a függvényt, akkor eredményként NUM-ot (numeric) kapunk, ha a karakterlánc számot tartalmaz, minden ellenkezô esetben CHAR-t. A típus megadásával a karakterlánc egyéb tulajdonságait is tesztelhetjük:
| Típus: | Rövid forma | 1-et ad vissza, ha a karakterlánc tartalmaz (ellenkezô esetben 0-át) |
| Alphanumeric | A | Csak betûket és számokat |
| Bits | B | Csak 0-át vagy 1-et |
| C | C | SBCS (Single Byte Character Set) és DBCS (Double Byte Character Set) karaktereket |
| Dbcs | D | Csak DBCS karaktereket |
| Lowercase | L | Csak kisbetûket |
| Mixed case | M | Csak betûket |
| Number | N | Csak számokat |
| Symbol | S | Csak REXX-ben használható karaktereket |
| Uppercase | U | Csak nagybetûket |
| Whole number | W | Egész számokat |
| Hexadecimal | X | Csak hexadecimális számokat vagy üres stringet |
Datatype példák:
Datatype('25') /* válasz: NUM */
Datatype('pista') /* válasz: CHAR */
Datatype('testing','L') /* válasz: 1 */
Datatype('Testing','Lowercase') /* válasz: 0 */
A következô példaprogram bekér egy adatot és teszteli annak típusát a Datatype függvénnyel. A programban használt Word utasítás az elsô paraméterként kapott karakterláncból (szoveg = isn't is) kiválasztja a második paraméterben megadott sorszámú szót és azt adja vissza. A második paraméter esetünkben a Datatype 0 vagy 1 értékétôl függôen 1 vagy 2 lehet, tehát a Say utasítás Datatype = 0 esetén a szövegben tárolt string elsô szavát (isn't - itt nem igaz), Datatype = 1 esetén pedig a másodikat (is - itt igaz) nyomtatja ki.
/* Teszteljük az adatot */ szoveg = "isn't is" SAY "Kérem az adatot!" PARSE PULL adat SAY adat WORD(szoveg, Datatype(adat, 'A') + 1) 'Alphanumeric' SAY adat WORD(szoveg, Datatype(adat, 'B') + 1) 'Bits' SAY adat WORD(szoveg, Datatype(adat, 'C') + 1) 'Mixed SBCS/DBCS' SAY adat WORD(szoveg, Datatype(adat, 'D') + 1) 'DBCS' SAY adat WORD(szoveg, Datatype(adat, 'L') + 1) 'Lowercase' SAY adat WORD(szoveg, Datatype(adat, 'M') + 1) 'Mixed case' SAY adat WORD(szoveg, Datatype(adat, 'N') + 1) 'Number' SAY adat WORD(szoveg, Datatype(adat, 'S') + 1) 'Symbol' SAY adat WORD(szoveg, Datatype(adat, 'U') + 1) 'Uppercase' SAY adat WORD(szoveg, Datatype(adat, 'W') + 1) 'Whole number' SAY adat WORD(szoveg, Datatype(adat, 'X') + 1) 'Hexadecimal' EXIT
REXX GYÍK:
K1. Miért nem történik semmi, amikor egy változónak értéket adok?
V1. Amikor egy változónak értéket adunk, akkor a számítógép adatot mozgat a memóriában. Értékadáskor tehát igenis történik "valami", bár ez közvetlenül nem látható.
K2. Miért jó, ha csak karakter típusú változó létezik?
V2. Ez a megközelítés nagyon megkönnyíti a programozást, ha kis programok gyors megírása a célunk. A változók precíz elôredefiniálásának viszont megvan az az elônye, hogy a fordító nagyon sok hibát még a program futtatása elôtt ki tud szûrni. Ez a megközelítés tehát akkor elônyös, ha komolyabb programokat fejlesztünk.
Gyakorlatok:
1. Mely változónevek jók? x123, ???, @OS2Times, kis_pista_autoja, !OK!, Mr&Mrs, 23eszkimo, i
2. Készítsünk egy programot, amely megállapítja, hogy a TEST változó számot tartalmaz-e!
3. Készítsünk egy programot, amely megállapítja, hogy a TEST változó nagy betût tartalmaz-e!
4. Mely számok helyesek? ' - 1.23', 7.73e-4, ' 0 ', '1 2', .e4
5. Mely karakterláncok helyesek? '', 'Hi', "Pista Pista", "!@3(&'""(^$"
| Kádár Zsolt 1997. 09. 17. | [ Elôzô lecke | Következô lecke | Tartalom ] |