Programmeren in REXX/Fundamenten: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
kGeen bewerkingssamenvatting
GuyDC (overleg | bijdragen)
Herschikking hoofdstukken
Regel 1:
{{Programmeren in REXX}}
=Fundamenten van REXX=
 
In dit hoofdstuk bespreken we de voornaamste karakteristieken van REXX, zoals zijn typische kenmerken, bouwstenen en syntaxis.
==Typische kenmerken==
 
==Typische kenmerken==
Fundamenteel aan REXX is dat alle woorden binnen het programma intern als karakterreeks worden opgeslagen.
Het is enkel in die gevallen dat een numerieke bewerking verwacht wordt, dat er een interne conversie van karakters naar getallen zal gebeuren. Na de bewerking zal het
Het resultaat teruggegevenvan wordende inbewerking dewordt vorm vanweer een karakterreeks.
 
Dit heeft als voornaamste gevolg dat er geen declaraties moeten worden gemaakt voor variabelen, zoals in de meeste andere programmeertalen wel het geval is.
 
Daarnaast is REXX in de meeste gevallen een ''[[w:interpreter|interpreter]]''. Op mainframe besturingssystemen ([[w:z/OS|z/OS]] en [[w:z/VM|z/VM]]) bestaan wel compilers voor REXX.
 
Hiermee wordt bedoeld dat REXX het programma lijn voor lijn in 2 afzonderlijke stappen zal uitvoeren. De eerste stap is een interpretatie van de instructie en omzetting naar interne code (te vergelijken met een compilatie) en als tweede stap de uitvoering. Er zijn wel optimalisaties voorzien om niet telkens de interpretatie-stap te hoeven doen, bv. in geval van een lus. Maar dit heeft als gevolg dat REXX het in uitvoeringssnelheid in de meeste gevallen niet kan winnen van gecompileerde programma's. Daartegenover staat echter dat de ontwikkeling van een werkend programma dikwijls veel sneller kan. De interpretatiestappen kunnen ook voordelen hebben, bijvoorbeeld bij het debuggen.
Regel 16 ⟶ 14:
Velen beschouwen REXX in eerste instantie enkel als een vervanger voor scripting (BAT-files). Dat was ook het eerste doel op mainframes, doch, de taal is volledig genoeg om er ook alle andere klassieke programmeertaken mee te vervullen. Op de snelle PC's (en zeker mainframes) van tegenwoordig kan deze tragere uitvoeringstijd een verwaarloosbare handicap zijn, en ruimschoots gecompenseerd worden door de snelheid van ontwikkeling. Zeker in die gevallen waar het programma slechts sporadisch of zelfs éénmalig moet worden uitgevoerd zal REXX een zeer interessant alternatief voor andere programmeertalen zijn.
 
==Bouwstenen==
Een REXX programma bestaat uit
* commentaren
Regel 24 ⟶ 22:
* functies
* labels
===Commentaren===
Commentaren worden in REXX begrensd door een beginnende <span style="color:red">/*</span> en een eindigende <span style="color:red">*/</span>.
 
Regel 38 ⟶ 36:
commentaar */
 
===Constanten===
Constanten zijn karakterreeksen die begrensd zijn door enkelvoudige of dubbele aanhalingstekens.
<br>Het is wel te verstaan dat als de constante met één van deze tekens begonnen wordt, ze met hetzelfde teken moet worden afgesloten.
Regel 51 ⟶ 49:
'1de8'x "11110110"b
 
===Getallen===
Een getal is een reeks cijfers, met eventueel een decimaal <u>punt</u> (geen komma dus!) en/of een minteken voor negatieve getallen. Exponentiële notatie kan ook worden gebruikt.
Dit zijn allemaal geldige getallen:
Regel 57 ⟶ 55:
Als men zich de fundamentele regel van REXX herinnert, dan kan men begrijpen dat de laatste 2 getallen (als een constante voorgesteld), ook geldig zijn. Nogmaals, alle woorden zijn karakterreeksen tot eventueel blijkt dat er moet mee gerekend worden. En de blanco karakters worden ook verwaarloosd bij berekeningen.
 
===Symbolen===
Met symbolen bedoelen we ''woorden'' bestaande uit een reeks karakters.
 
Regel 85 ⟶ 83:
Dit is perfect geldig doch, omwille van de leesbaarheid, ten stelligste af te raden. Gebruik geen namen voor variabelen die de naam van een commando (of functie) zijn.
 
===Instructies===
Deze zullen in meer detail beschreven in volgende hoofdstukken, maar de lijst is zo beperkt dat we ze hier toch even kunnen opsommen: '''ADDRESS,'''
'''[[Programmeren in REXX/Commando1#ARG|ARG]]''', '''[[Programmeren in REXX/Commando2#CALL|CALL]]''',
Regel 102 ⟶ 100:
'''TRACE'''. Van een aantal kan men nu al vermoeden waartoe ze zullen dienen.
 
===Functies===
Functies zullen we ook later beschrijven. Ze hebben de algemene vorm:
'''functienaam(parameter1,parameter2,...)'''
Regel 116 ⟶ 114:
De functie '''length''' geeft de lengte van zijn parameter terug. We verwachten hier dus een waarde 16 als antwoord.
 
===Labels===
Labels (letterlijk: etiketten), zijn plaatsen naar waar een programma kan springen (met een [[Programmeren in REXX/Commando2#SIGNAL|SIGNAL]],
[[Programmeren in REXX/Commando2#CALL|CALL]] of een oproep van een functie).
Regel 132 ⟶ 130:
Het is zelfs mogelijk meerdere labels na elkaar te gebruiken, waarbij ze te beschouwen zijn als elkaars synoniem.
 
===Leestekens===
====Vervolgteken====
De '''komma''' aan het eind van een regel, geeft aan dat de instructie wordt vervolgd op de volgende lijn. Dit is een voorbeeld:
/* Gesplitste instructie */
Regel 140 ⟶ 138:
Merk op dat het voor commentaren over meerdere regels <u>niet</u> nodig is continuatietekens te gebruiken. De komma zal na het samenvoegen van de lijnen vervangen worden door een spatie.
 
====Scheidingsteken====
De '''puntkomma''' laat toe instructies van elkaar te scheiden, zoals hier:
/* Meerdere instructies op één regel */
Regel 147 ⟶ 145:
{{Bericht
|titel=Programma opbouw
|bericht=REXX interpreteert regelprogrammalijn per regelprogrammalijn (Engels: statement). MetEen eenprogrammalijn regel bedoelt men een reeks tokens beëindigd met:eindigt
* bij het einde van een lijnregel (een line-end, een CrLf bvb), tenzij een vervolgteken werd gebruikt.
* een scheidingsteken, (;)midden in een regel
* soms een impliciet scheidingsteken binnen een instructie. REXX veronderstelt een scheidingsteken na THEN, ELSE en OTHERWISE.
Als we '''if voorwaarde then instructie; else instructie''' schrijven, hebben we eigenlijk
'''if voorwaarde; then; instructie; else; instructie''' geschreven.
|type=info}}
 
====Bewerkingstekens====
Hiermee bedoelen we o.a. de tekens die toelaten op te tellen of af te trekken. We hebben, in volgorde van uitvoering:
* '''Prefix \ + of -''' aan het begin van het woord betekenen ze respectievelijk '''NOT''', positief of negatief.
Regel 172 ⟶ 168:
Bij de strikte vergelijkingen worden de twee leden strikt genomen zoals ze zijn, in de andere gevallen wordt de korste karakterreeks tot dezelfde lengte als de langste gebracht door er blanco karakters aan toe te voegen.
 
==Concatenatie==
De term '''concatenatie''' die we bij het bewerkingsteken || hebben gebruikt komt van het Engelse werkwoord '''to concatenate''' en betekent: aaneenkoppelen/-voegen/-ketenen.
 
Regel 206 ⟶ 202:
Bij het eerste voorbeeld wordt het dubbele aanhalingsteken door een enkel vervangen zoals we boven al leerden.
 
==Speciale variabelen==
Er zijn 3 gereserveerde variabelen in REXX:
# '''RC''', bevat de returncode van het laatst uitgevoerde ''host-command'', een commando dat door het besturingssyteem is uitgevoerd.
Regel 213 ⟶ 209:
Deze variabelen zullen ten gepaste tijde meer uitleg krijgen.
 
==Stems==
REXX kent een speciaal soort variabelen, namelijk '''stems'''. Ze laten o.a. toe om vectoren (arrays) en matrices te simuleren, maar ze zijn meer dan dat.
 
Regel 256 ⟶ 252:
zal dus het element '''JAN.Dit is een hele volzin''' de waarde 17 toekennen. Dit geeft interessante mogelijkheden waar we later nog zullen op terugkomen.
 
==Programmabuffer ofte Stack==
Gegevens die ingevoerd worden vanuit externe bronnen - meestal het toetsenbord, maar ook andere programma's - kunnen in de zogenaamde '''stack''' of programmabuffer worden opgeslagen in afwachting van verwerking. Het is één van de manieren om gegevens uit te wisselen tussen programma's.
 
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.