Kurs REXX’a: Podstawy języka i pierwszy program

<<następna część artykułupoprzednia część artykułu>>
1. Pierwszy program

/* Rexx */

/******************************************/
/* Program symulujący rzuty kostką do gry */
/******************************************/
Say "Podaj ilość rzutów";
Pull ilosc_rzutow
If (ilosc_rzutow = '') Then
Do
Say "Nie podałeś ilości rzutów kostką :-(";
Exit 4;
End /* If (ilosc_rzutow = '') */
Do ilosc_rzutow
ilosc_oczek = Random(1,6);
Say "Wynik: "ilosc_oczek;
End /* Do counter */
Exit 0

 

Nasz pierwszy program realizuje następujący algorytm:

1. Poproś użytkownika o podanie ilości rzutów kostką;
2. Przypisz podaną ilość do zmiennej ilosc_rzutow;
3. Jeśli nie podano ilości rzutów wyświetl komunikat oraz zakończ swoje działanie z RC=4;
4. Jeśli podano ilość rzutów wylosuj liczby oraz wyświetl wyniki na ekranie;
5. Zakończ działanie z RC=0.

 

2. Jak uruchomić program

Aby uruchomić nasz program w środowisku Windows wystarczy treść programu przepisać do Notatnika oraz zapisać z rozszerzeniem .rexx. Następnie w wierszu poleceń (jeśli wcześniej zainstalowaliśmy Regine) wydać polecenie rexx.exe oraz podać ścieżkę do programu, np.:

rexx.exe prog\Rzuty_kostka.rexx

W środowisku TSO program REXX może być zapisany w zbiorze sekwencyjnym lub jako member w PDS. Przed przystąpieniem do napisania treści programu proponuję w linii komend edytora wydać polecenia:

  • rec on – umożliwia cofnięcie wprowadzonych zmian;
  • hi on – kolorowanie składni;
  • unnum – wyłączenie numeracji;
  • caps off – wyłącza automatyczne wstawiania wielkich liter.

Nasz program możemy uruchomić na cztery sposoby:

1. Wydając polecenie EXEC oraz podając zbiór i nazwę membra: EXEC ‚SERWER.BLOG.REXX.CNTL(PIERWSZY)’
2. Podając nazwę programu: PIERWSZY
3. Podają nazwę programu poprzedzoną znakiem %: %PIERWSZY
4. Wydając polecenie ex przy nazwie zbioru/membra: ex_______ PIERWSZY

Aby uruchomić program sposobem 2 oraz 3 zbiór z programem musi być zaalokowany w //SYSPROC DD lub //SYSEXEC DD.

Przykład działania naszego programu w TSO wygląda następująco:

Podaj ilość rzutów
2
Wynik: 6
Wynik: 4
***

 

W przypadku gdy nie podamy liczby rzutów program zakończy działanie następująco:

Podaj ilość rzutów
Nie podałeś ilości rzutów kostką :-(
***

 

Program skład się z kilku elementów, które zostaną opisane poniżej.

3. Komentarze

Wszystko co znajduję się pomiędzy znakami /* oraz */ jest traktowane jako komentarz i nie wpływa na działanie programu. Każdy program napisany w REXXie powinien zaczynać się komentarzem zawierającym słowo REXX, np.:

/* Program w REXX zawsze zaczyna się komentarzem */

 

Pamiętajmy, że komentarze służą przede wszystkim nam samym, najczęściej opisujemy w nich działanie poszczególnych części programu co jest bardzo przydatne kiedy powracamy do naszego kodu po długim czasie. Komentarz może wystąpić w oddzielnej linii, za lub przed instrukcją:

/* Komentarz w oddzielnej linii */
/* przed instrukcją */ Say "Cześć";
Say "Cześć"; /* za instrukcją */;

 

Możemy również komentować w wielu wierszach oraz je zagnieżdżać:

/* To jest długi komentarz,
który zajmuje kilka
linii*/
/* To jest /* komentarz zagnieżdżony */ komentarz */

 

4. Kontynuacje i wcięcia

Krótkie instrukcje mogą być oddzielone od siebie średnikiem:

var_1 = "Zmienna";var_2 = "Zmienna 2";var_3 = 3;

 

Każdy ciąg znaków zakończony średnikiem traktowany jest jako instrukcja. Stosowanie średnika na końcu każdej linii programu nie jest warunkiem koniecznym w REXXie, ale jego stosowanie jest bardzo wskazane ponieważ informuje interpreter o końcu instrukcji oraz wyrabia w nas nawyk przydatny w innych językach (np. Java, C++). Długie instrukcje nie mieszczące się w jednej linii, możemy przenieść do następnej za pomocą przecinka:

var_4 = "To jest bardzo długi tekst, który przeniosę do nowej",
" linii za pomocą przecinka";

 

Stosowanie wcięć nie jest warunkiem koniecznym, ale ułatwia odczytywanie kodu oraz jego analizę.

5. Zmienne

Zmienne służą do przechowywania danych. W naszym programie posługujemy się zmiennymi o nazwach ilosc_rzutow oraz ilosc_oczek. Zmienne nie są deklarowane, a ich wartość ulega zmianie w trakcie działania programu. W REXXie nazwy zmiennych:

  • mogą składać się z 250 znaków;
  • mogą zawierać litery, liczby, oraz niektóre znaki specjalne;
  • nie mogą zaczynać się od liczby lub przecinka;
  • mogą być zapisywane wielkimi bądź małymi literami, dla REXXa zmienna == ZMIENNA == zMiEnNa
  • należy unikać słów, które są słowami kluczowymi języka jak np.: If, Do, Else.

 

6. Literały

Literały to konstrukcje językowe, których wartość się nie zmienia. W REXXie mamy ich trzy rodzaje: literały liczbowe, znakowe oraz łańcuchowe. Literałem liczbowym jest podanie bezpośrednio konkretnej liczby. Literałem znakowym jest jeden znak zapisany pomiędzy apostrofami, np.: ‘a’, natomiast łańcuchowy tworzą ciągi znaków, które są tekstami lub całymi zdaniami. W poniższych przykładach literały zostały oznaczone pogrubioną kursywą:

size = 16 /* literał liczbowy */
znak = 'd' /* literał znakowy */

 

W naszym przykładzie literałem łańcuchowym jest:

"Podaj ilość rzutów";

 

7. Instrukcja Say oraz Do

Instrukcja Say służy do wyprowadzania danych na konsolę. Wszystko to co znajduje się z prawej strony instrukcji Say zostanie wyświetlone na ekranie. Instrukcja Do pełni dwie role: oddziela pewne części programu oraz może, tak jak w naszym przypadku, określać ile razy to część kodu ma się wykonać. W naszym przykładzie ilość wykonań pobierana jest od użytkownika co realizuje instrukcja Pull.

8. Funkcje

Funkcje to części kodu które wykonują określoną czynność. Funkcję wywołujemy podając jej nazwę oraz okrągłe nawiasy. W nawiasach podajemy argumenty które chcemy przekazać w momencie jej wywołania. W naszym przykładzie wywołujemy funkcję Random (1,6) z dwoma parametrami. Funkcja Random, jak sama nazwa wskazuje, służy do wygenerowania losowej liczby z podanego przedziału, czyli od 1 do 6.

Do wielu zagadnień które pojawiły się w tej części kursu będziemy wracać i szerzej omawiać w kolejnych odsłonach. Już teraz jednakże zachęcam do przetrenowania poznanych konstrukcji oraz samodzielnego przetestowania innych wariantów programu.

Pliki źródłowe do pobrania (pilk Ruty_kostka.rexx)

Autor: Dawid Morawiec

Komentarze

  1. nareszcie ktoś zauważył że taki język istnieje i jest całkiem fajny…
    był kiedyś ciekawy kurs rexx-a dla os/2 w pc magazine (lata 90) pana barteczki.
    mam nadzieję że będą następne części kursu dla tso (i nie tylko ?) w serwerblog.com.

    pozdrawiam
    jurekc

    Komentarz napisał jerzy dnia 30 kwietnia 2014 o godzinie 10:29

  2. Dziękujemy za komentarz

    Komentarz napisał admin dnia 30 kwietnia 2014 o godzinie 10:35

  3. Bardzo fajny i przydatny opis. Pomógł mi rozpocząć naukę. Ponieważ nie mogę pochwalić się dobrą znajomością j. angielskiego, idealnie byłoby mieć opis wszystkich funkcji i poleceń po polsku. Może ktoś wie, czy coś takiego można gdzieś znaleźć?

    Pozdrawiam
    Maciej

    Komentarz napisał Maciej dnia 11 kwietnia 2015 o godzinie 20:34

The comments are closed.

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.

Subskrybuj RSS