REXX (ang. REstructured eXtended eXecutor) jest proceduralnym interpretowanym językiem programowania zaprojektowanym przez Mike'a Cowlishawa. Jego składnia jest zbliżona do języka angielskiego. Oryginalnie ukazał się na platformie VM/SP Relase 3 w 1983 roku. Dużą zaletą tego języka jest możliwość zastosowania go jako języka programowania wsadowego w wielorakich systemach operacyjnych oraz języka skryptowego dla wielorakich środowisk oraz aplikacji. Rexx charakteryzuje się dużym zestawem wbudowanych funkcji o naturalnych nazwach oraz argumentach, ma tablice dynamiczne, nie trzeba deklarować zmiennych oraz określać ich typów. Na podstawie REXXa powstały dwa języki obiektowe NetRexx oraz ObjectRexx dla tych trzech języków (REXX, NetRexx, ObjectRexx) obowiązuje zasada "write once, run anywhere". Przy pomocy wizualnych środowisk zdarzeniowego programowania w REXXie (np.VisPro/Rexx, GpfRexx, VX Rexx) da się w bardzo prosty sposób tworzyć aplikacje z interfejsem graficznym GUI. ARexx, implementacja języka Rexx dla AmigaOS oraz MorphOS, jest integralnym elementem tych systemów. Bardzo duża cząstka oprogramowania dla AmigaOS/MorphOS jest wyposażona w porty ARexxa. Ta cecha wydatnie rozszerza możliwość programów oraz dopuszcza komunikowanie się ich pomiędzy sobą.
Zaimplementowany jest na wszystkich znaczących platformach firmy IBM:
Można go używać także na platformach niezwiązanych z IBM jak:
Składnia
Instrukcja warunkowa IF
IF [warunek] THEN
[instrukcja]
ELSE
[instrukcja]
Przykład wykorzystania instrukcji warunkowej:
/* If varM jest większe od 10,
then say "It's true". W przeciwnym przypadku, say "It's not true". */
varM = 5 + 2
IF varM > 10 THEN
SAY "It's true."
ELSE
SAY "It's not true."
Operatory porównania
| = |
równe |
| < |
mniejsze |
| > |
większe |
| <= |
mniejsze albo równe |
| >= |
większe albo równe |
| <> |
większe albo mniejsze (nierówne) |
| \= albo ^= |
nierówne |
| \< |
niemniejsze |
| \> |
niewiększe |
SELECT jest używany w przypadku kiedy ma się wykonać jedna z kilku możliwych instrukcji warunkowych (pozostałe zostają pominięte).
/* Sprawdź varM dla wielorakich wyrażeń ale wykonaj tylko jedną instrukcję dla wyrażenia */
SAY "Enter a number"
PULL varM
SELECT
WHEN varM = 10 THEN SAY "It's equal to 10."
WHEN varM < 10 THEN SAY "It's less than 10."
WHEN varM < 20 THEN SAY "It's less than 20."
END
Pętla Aby zaimplementować pętle w języku Rexx trzeba użyć wyrazów DO oraz END. DO wskazuje na początek pętli oraz jest umieszczane przed pierwsza instrukcją w pętli, natomiast END kończy pętle oraz jest umieszczane po ostatniej instrukcji w pętli. Standardowa pętla
DO UNTIL [warunek]
[instrukcje]
END
DO WHILE [warunek]
[instrukcje]
END
Inne przykłady wykorzystania pętli:
/* Powtórzy "Hello" 10 razy */
DO 10
SAY "Hello"
END
Wykorzystanie słowa FOREVER spowoduje wykonanie się pętli nieskończenie wiele razy. Taką pętle da się przerwać przy pomocy instrukcji opuszczenia LEAVE
/* Słowo "Hello" będzie powtarzane nieskończenie */
DO FOREVER
SAY "Hello"
END
----
DO FOREVER
[instrukcja]
IF [warunek] THEN LEAVE
END
Przykładowy program
Należy pamiętać, że każdy program w REXX'ie rozpoczyna się od komentarza. Jako rozszerzenie pliku przyjmuje się ".rexx" albo ".rex".
/* REXX Calculator */
/* progam glowny */
say "Please enter two numbers"
parse pull a b . /* wczytanie zmiennych a oraz b z klawiatury */
if b <>"" then
if \(datatype(a,number) & datatype(b,number)) then
say "a or b isn't a number"
else
call Sub1 a b /* wywolanie procedury Sub1 */
else
say "b is empty"
Exit
/* procedura */
Sub1:
say "At" TIME() "on" DATE() "user" USERID() "entered" a "and" b
say a "+" b "=" a + b
say a "-" b "=" a - b
say a "*" b "=" a * b
say a "/" b "=" a / b
say "divided by" b "is" a%b "with remainder of" a//b
return
Sprawdź też
Linki zewnętrzne