Úvod do jazyka OPL 5/5
Procedury s návratem hodnot
Podobně jako funkce v jazyce C nebo v Pascalu mohou i procedury jazyka OPL vracet číselné nebo řetězcové hodnoty. Aby mohla procedura vracet hodnotu, musíme udělat dvě změny: ke jménu procedury - ale před dvojtečku - doplnit znak označující typ vrácené hodnoty (podobně jako u proměnných). Neuvedeme-li žádný znak označující typ výsledku, může procedura vracet reálné číslo. Ve zdrojovém textu procedury pak použijeme klíčové slovo RETURN, za kterým uvedeme hodnotu, která bude při skončení procedury vrácena.
PROC hlavni: LOCAL cislo$(20), upravene$(20) WHILE 1 PRINT "Zadejte telefonní číslo:"; INPUT cislo$ IF LEN(cislo$) = 0 BREAK ENDIF upravene$ = UpravCislo$:(cislo$, "605") PRINT "Číslo v mezinárodním formátu je "; upravene$ ENDWH ENDP PROC UpravCislo$:(cislo$, prefix$) IF MID$(cislo$, 1, 1) = "+" RETURN cislo$ ELSEIF MID$(cislo$, 1, 1) = "0" RETURN "+420" + RIGHT$(cislo$, LEN(cislo$)-1) ELSE RETURN "+420" + prefix$ + cislo$ ENDIF ENDP
Parametry ani návratové hodnoty nemohou být pole. Pokud nepoužijeme příkaz RETURN, budou procedury vracející numerické hodnoty vracet číslo 0 a procedury vracející řetězcové hodnoty budou vracet prázdný řetězec "".
Ke komunikaci s procedurami, které voláme, můžeme použít i globální proměnné (definované pomocí GLOBAL) - hodnoty uložíme do vhodných globálních proměnných a vrátíme příznak úspěchu:
PROC hlavni: GLOBAL gVysledek%(100), gVysledekDelka% IF NastavVysledek%: > 0 REM -- použij pole gVysledek%(1..gVysledekDelka%) ENDIF ENDP PROC NastavVysledek%: gVysledekDelka% = 0 REM -- naplň pole gVysledek%() ... -- RETURN gVysledekDelka% ENDP
Základní uživatelské rozhraní - vstup a výstup
Již jsme uvedli příkaz INPUT, který slouží ke vstupu textové nebo numerické proměnné, a příkaz GET, který čeká na stisk klávesy a použijeme-li přiřazení a%=GET, vrátí její hodnotu jako číslo. Podobně funguje i GET$, který se odlišuje jen tím, že jako výslednou hodnotu vrací jednoznakový řetězec. Podobně jako dvojice GET a GET$ funguje i dvojice příkazů KEY a KEY$ s jedinou výjimkou - tyto příkazy nečekají na stisk kávesy. Pokud žádná klávesa nebyla stisknuta, tak tyto příkazy vrací nulu, respektive prázdný řetězec.
Příkaz EDIT, za kterým následuje řetězcová proměnná, dovoluje editovat (měnit) text v této proměnné jako v následujícím příkladu, ve kterém také vyzkoušíme použití klíčového slova KEY:
PROC edit: LOCAL t$(30), i%, ii%, j$(4) t$="Toto je tekzt" PRINT "Opravte text: "; EDIT t$ PRINT "Opravený text je ", t$ i%=1 j$="\|/—" DO AT 1,3 : PRINT MID$(j$, i%, 1); ii%=ii%+1 IF ii%=50 : i%=i%+1 : ii% = 0 : ENDIF IF i% > 4 : i% = 1 : ENDIF UNTIL KEY <> 0 ENDP
Pro výstup textu slouží příkaz PRINT, za kterým následuje seznam proměnných, čísel a řetězců, které budou zobrazeny, oddělených středníky nebo čárkami. Podobně jako v jazyce BASIC ukončíme-li příkaz PRINT středníkem, tak na konci tisku neprovede přesun na nový řádek a další text je zobrazen na tom samém řádku. Příkazem AT můžeme zadat číslo řádku a sloupce, na kterém bude následující příkaz PRINT zobrazovat text. Příkaz CLS smaže obsah displeje.
Další zajímavé příkazy
Popis základů jazyka OPL si doplníme o několik zajímavých příkazů, které je možné použít. Příkaz OFF vypne Psion na stanovený počet vteřin, příkaz PAUSE pozastaví program na dobu udanou ve dvacetinách vteřiny a příkaz BEEP delka%, vyska% slouží ke generování tónu stanovené délky ve 1/32 vteřiny a výšky v Hz.
K nastavení generátoru pseudonáhodných čísel na počáteční hodnotu slouží příkaz RANDOMIZE. Často jsou v této hodnotě použity rychle se měnící časové proměnné (MINUTE, SECOND). Pseudonáhodná čísla (v rozsahu <0-1)) jsou vyzvedávána funkcí RND, výraz INT(RND*p%+1) generuje náhodné číslo od 1 do p%.
Nyní již máte určitý přehled o základech použití jazyka OPL. Tento stručný článek nemohl suplovat referenční příručku jazyka, která je zdarma dostupná na internetu na adrese www.symbian.com v sekci věnované vývojářům software. V příští sérii článků, která vyjde po prázdninách, budeme již psát o komplikovanějších tématech - o grafice a o uživatelském rozhraní.