Programmeren in REXX/Fundamenten: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
Dubbele vertikale streep geeft problemen bij creatie van een boek (wordt als cel voor tabel behandeld)
GuyDC (overleg | bijdragen)
Afwerken van dit hoofdstuk.
Regel 3:
=Typische kenmerken=
Fundamenteel aan REXX is dat alle woorden binnen het programma intern als karakterreeks worden opgeslagen.
Het is enkel in die gevallen datwanneer een numerieke bewerking verwacht wordt, dat er een interne conversie van karakters naar getallen zal gebeuren.
Het resultaat van de bewerking wordt weer 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.
 
We zullen karakterreeksen vanaf nu meestal met de Engelse term '''string''' benoemen.
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.
 
Vervolgens werkt REXX meestal als een ''[[w:interpreter|interpreter]]''.
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.
Hiermee wordt bedoeld dat REXX het programma lijn voor lijn zal uitvoeren, en daarvoor telkens in twee stappen wordt gewerkt. De eerste stap is een interpretatie van de programmalijn en omzetting naar interne code (te vergelijken met een compilatie). De tweede stap is dan de eigenlijke uitvoering. Er zijn wel optimalisaties voorzien om niet telkens de eerste stap te moeten doen, bv. in geval van een lus.
 
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 veelal heel wat sneller kan. De interpretatie-stap kan ook voordelen hebben, bijvoorbeeld bij het debuggen.
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.
 
Op mainframe besturingssystemen ([[w:z/OS|z/OS]] en [[w:z/VM|z/VM]]) bestaan wel compilers voor REXX.
 
Door velen wordt REXX ten onrechte beschouwd als enkel een vervanger voor scripting (BAT-files). Dat was wel het eerste doel op mainframes. We zullen echter zien dat de taal volledig genoeg is om er ook alle andere klassieke programmeertaken mee te vervullen. Op de huidige snelle PC's (en zeker de mainframes) kan een 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.
 
Door de weinig complexe schrijfwijze, het gebruik van leesbare (Engelse) termen en het ontbreken van declaraties is het ook een uitgelezen programmeertaal voor minder geroutineerde of beginnende computergebruikers.
<!--------------------------------------------------->
=Bouwstenen=
Een REXX programma bestaat uit
Regel 22 ⟶ 29:
* functies
* labels
<!--------------------------------------------------->
==Commentaren==
Commentaren worden in REXX begrensd door een beginnende <span style="color:red">/*</span> en een eindigende <span style="color:red">*/</span>.
 
Commentaren kunnen over meerdere lijnen gaan en een commentaar kan een ander commentaar bevatten (geneste commentaren). Ze kunnen praktisch overal voorkomen, ook midden in een instructie. REXX zoekt naar die begin- en eindaanduidingen zonder rekening te houden met andere inhoud. Dus indien ergens in een constante van het programma één van die tekens voorkomen kan het mislopen.
 
Op sommige systemen moet een REXX programma beginnen met een commentaar, desnoods een ''leeg'' commentaar zoals in een volgende voorbeeld.
Andere implementaties of systemen vereisen dat niet. Toch blijft het een goede gewoonte om het programma te beginnen met een korte beschrijving,
en eventueel zelfsaangevuld met de naam van de auteurprogrammeur, een creatiedatum en de historiek van de veranderingen.
/* */
say "Hello" /* Dit zal Hello op het scherm zetten */
Regel 35 ⟶ 43:
allemaal
commentaar */
if i=5 /* en alleen dan */ then say "Adieu"
 
<!--------------------------------------------------->
==Constanten==
Constanten zijn karakterreeksen die begrensd zijnworden door enkelvoudige of dubbele aanhalingstekens (<span style="color:red">'</span> of <span style="color:red">"</span>).
<br>HetUiteraard ismoeten welbegin- teen verstaaneindteken datvan als deeen constante met één van deze tekens begonnen wordt, ze met hetzelfde teken moet worden afgeslotenzijn.
say "Nice weather, isn't it?"
definieert een constante (een zin). Omdat in de zin een enkelvoudig aanhalingstekenapostrof nodig is, wordt de zin omgeven door de dubbele aanhalingstekens.
 
Een andere oplossing voorbestaat diter gevalhier bestaatin erinom het teken te ontdubbelen, zoals hierdus:
say 'Nice weather, isn&rsquo;&rsquo;t it?'
Geef echter toe dat dit iets minder leesbaar overkomt, doch in sommige situaties kan dit nodig zijn.
 
Een constante kan ook met hexadecimale of binaire notatie opgegeven worden:
'1de8'x "11110110"b
Deze notatie laat o.a. toe onleesbare controlekarakters te plaatsen.
<!--------------------------------------------------->
==Getallen==
Een getal is een reeks cijfers, met eventueel een decimaal <u>punt</u> (geen komma dus!). Negatieve getallen worden voorafgegaan door een minteken. Exponentiële notatie kan ook worden gebruikt.
 
==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:
17 98.07 -101 12.2e6 73e-128 '-17.9' ' 11.22 '
Als men zich de fundamentele regel van REXX herinnert, dan kan men begrijpen dat deDe laatste 2 getallen (als een constante voorgesteld), ookzijn evengoed geldig, zijn.want Nogmaals,we alleleerden woordenal zijndat REXX alles opslaat als karakterreeksen tot eventueel blijkt dat er moet mee gerekend worden. En de blanco karaktersSpaties worden ookin verwaarloosdberekeningen bijniet berekeningenmeegenomen.
<!--------------------------------------------------->
 
==Symbolen==
Met symbolen bedoelen we ''woorden'' bestaande uit een reeks karakters.
Regel 63 ⟶ 74:
Cijfers en het punt mogen echter niet als eerste voorkomen.
 
De term ''woorden'' moet dus in een brede context gezien worden, want er kunnen naast letters ook andere tekens in voorkomen. InDaarom hetzullen Engelswe spreektvanaf mennu vanliever '''token'''s,gebruik enmaken omdatvan de Engelse term ''woorden'token'''. eenDeze meerwordt beperkteook betekenisin heeft,de zullen we liever deze Engelse termREXX verderboeken gebruikengebruikt.
Elke token is van andere gescheiden door één of meer blanco karakters of bewerkingstekens.
 
Elke token wordt van de rest gescheiden door één of meer spaties of bewerkingstekens. Deze symbolen worden dan, al naargelang hun plaats in het programma, geïnterpreteerdbeschouwd als variabelen of als instructies (commando's).
 
De initiële waarde van een variabeletoken is haargelijk eigenaan zijn naam in hoofdletters. Dus zalzullen in volgende zin
say a
beide woorden door REXX gezien worden als respectievelijk '''SAY''' en '''A'''. Het token '''SAY''' wordt door REXX daarna wel herkend als een commando dat wat volgt op het scherm moet afdrukken. Het token '''A''' zal als variabele gezien worden vermits het niet tussen aanhalingstekens staat en dus geen constante is. Nergens werd hier een waarde toegekend aan die variabele, dus, haar initiële waarde blijft zolang "A", en het zal die "A" zijn die we op het scherm zullen zien verschijnen.
als resultaat <span style="color:red">A</span> op het scherm toveren. Maar gezien de fundamentele karakteristiek van REXX heeft het woord ''say'' eigenlijk de waarde <span style:"color:red">SAY</span>. Door de plaats in het programma is het voor REXX duidelijk dat hier het commando '''say''' moet worden uitgevoerd, en het niet gaat om een variabele.
 
{{Bericht
|titel=KaraktergrootteOngevoelig onbelangrijkvoor karaktergrootte (Case-insensitive)
|bericht=Rexx maakt geen onderscheid tussen kleine letters en hoofdletters (Engels: case-insensitive). '''ABC''' verwijst dus naar hetzelfde token als '''abc''' of '''Abc''', want uiteindelijk worden ze voor REXX toch allemaal '''ABC'''. Constanten kunnen natuurlijk wél bestaan uit gemengde karakters ("Hello" is niet gelijk aan "HELLO").
|type=waarschuwing}}
 
In onderstaand voorbeeldje is het symbool '''"do'''" op de eerste instructieregel tweemaal gebruikt. De eerste maal is het een instructie en de tweede maal een variabele.
do do=1 to 10
say do
end
Dit is perfect geldig doch, omwille van de leesbaarheid, ten stelligste af te raden. Gebruik geen variabel-namen voordie variabelenovereenkomen met die de naam van een commando (of functie) zijn.
<!--------------------------------------------------->
 
==InstructiesBevelen==
Deze zullen in meer detail beschreven in volgende hoofdstukken, maar de lijst ervan is zo beperkt dat we ze hier toch even kunnen opsommen: '''ADDRESS,'''
'''[[Programmeren in REXX/Commando1#ARG|ARG]]''', '''[[Programmeren in REXX/Commando2#CALL|CALL]]''',
'''[[Programmeren in REXX/Commando1#DO|DO]],''' '''[[Programmeren in REXX/Commando2#DROP|DROP]],'''
Regel 98 ⟶ 107:
'''[[Programmeren in REXX/Commando2#RETURN|RETURN]],''' '''[[Programmeren in REXX/Commando1#SAY|SAY]],'''
'''[[Programmeren in REXX/Commando1#SELECT|SELECT]],''' '''[[Programmeren in REXX/Commando2#SIGNAL|SIGNAL]],''' en
'''TRACE'''. Van een aantal kan men nu al vermoeden waartoe ze zullen dienen. Soms gebruiken we hiervoor ook de term ''instructies'' zoals in het Engels ''instructions''. Doch dit kan ook leiden tot verwarring met een volledige programmalijn.
<!--------------------------------------------------->
 
==Functies==
Functies zullen wekomen ook later beschrijven.uitgebreid Zeaan hebbenbod. deHun algemene vorm is:
'''functienaam(parameter1,parameter2,...)'''
waarbij de parameters van elkaar gescheiden worden door komma's. De lijst van parameters moet aan de functienaam plakken, er mag geen spatie tussen geplaatst worden.
waarbij het open-haakje zonder spatie na de functienaam moet komen.
 
StandaardDe bezitlijst destandaardfuncties REXXis taalzeer reedsgroot. eenZe helehier reeks standaardfuncties. Een opsommingopsommen zou ons hier dusnu te ver leiden. We komen de meeste ten gepaste tijde wel tegen.
 
Functies kunnen ook verschillen naargelang het besturingssysteem,. en erEr bestaan tevens externe functiepakketten die kunnen worden toegevoegd aan de basisset.
Het is tenslotte mogelijk zijn eigen functies te schrijven (zie later).
 
Toch een voorbeeldje van een (basis-)functie hier:
say '''length'''("'Dit is een tekst"')
De functie '''length''' geeft de lengte van zijn parameter terug. WeAls verwachteneerste hiertussenstap dusvan de interpretatie door REXX zal het deel "length('Dit is een waardetekst')" vervangen worden door het getal 16. Daarna zal het bevel "say" zorgen dat dit getal op het scherm alswordt antwoordafgedrukt.
<!--------------------------------------------------->
 
==Labels==
Labels (letterlijk: etiketten), zijn plaatsen naar waar een programma kan springen (met eende bevelen [[Programmeren in REXX/Commando2#SIGNAL|SIGNAL]], of
[[Programmeren in REXX/Commando2#CALL|CALL]], of eennog oproepals begin van een eigen functie).
 
Een label wordtbestaat gevormd dooruit een token gevolgd door een dubbeldubbele punt. Bijvoorbeeld:
signal MijnLabel /* We springen verder */
[instructies]
Regel 126 ⟶ 135:
exit /* we verlaten het programma */
 
Ook voor labels geldt dat ze ''case-insensitive''ongevoelig voor karaktergrootte zijn, dus MijnLabel en MIJNLABEL zijn hetzelfde, en gewoon een speciale vorm van token.
 
Het is zelfs mogelijk meerdere labels na elkaar te gebruiken, waarbij ze te beschouwen zijn als elkaars synoniem.
 
Het is zelfs mogelijk meerdere labels na elkaar te gebruiken, waarbij ze dan te beschouwen zijn als elkaars synoniem.
<!--------------------------------------------------->
==Leestekens==
===Vervolgteken===
De '''komma''' aan het eind van een regeltekstregel, geeft aan dat de instructie wordt vervolgd op de volgende lijn. Dit is een voorbeeld:
/* Gesplitste instructie */
Say "Dit is een"''','''
"tekst."
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:
Regel 144 ⟶ 152:
 
{{Bericht
|titel=Programma opbouw - statements.
|bericht=REXX interpreteert programmalijn per programmalijn (Engels: statement). Een programmalijn eindigt
* bij het einde van een regel (een line-end, een CrLf bvb), tenzij een vervolgteken werd gebruikt. ;
* een scheidingsteken, midden in een regel;
* een impliciet scheidingsteken binnen een instructie. REXX veronderstelt een scheidingsteken na THEN, ELSE en OTHERWISE.
Om duidelijk een onderscheid te maken tussen de tekstregels of programmalijnen die de broncode opmaken, en de aparte logische eenheden die REXX als instructies uitvoert zullen we deze laatste vanaf nu liever met het
Engelse woord '''statement''' beschrijven.
|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:
Regel 166 ⟶ 175:
* '''&''' logische en (AND)
* '''| &&''' logische of (OR) en exclusieve of (XOR)
Bij vergelijkingen wordt het kortste lid tot gelijke lengte van het langste lid gemaakt door er spaties aan toe te voegen alvorens de vergelijking aan te vatten. Bij de '''strikte''' vormen van vergelijkingen wordt deze verlenging niet toegepast.
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.
 
Het resultaat van een vergelijking is 1 (waar) of 0 (onwaar). Bij logische bewerkingen mogen enkel 1 of 0 gebruikt worden.
 
Voorbeelden:
\1 /* 0 (niet 1) */
-7 * (4+3) /* -49 */
-7*4 + 3 /* -25 (volgorde belangrijk)*/
'ABC'=='ABC' /* 1 (= waar) */
'ABC'=='ABC ' /* 0 (= niet waar) */
'ABC'\='abc' /* 1 (= waar) */
(1 | 0) & 1 /* 1 (= waar) */
12 % 7 /* 1 (modulo) */
12 // 7 /* 5 (rest van deling) */
Concatenatie wordt onmiddellijk hierna uitgelegd.
<!--------------------------------------------------->
=Concatenatie=
De term '''concatenatie''' die we bij(met het bewerkingsteken &#124;&#124; hebben gebruikt) komt van het Engelse werkwoord '''to concatenate''' en betekent: aaneenkoppelen/-voegen/-ketenen. Er worden dus twee delen aan elkaar geklit. Maar dit vraagt toch om wat meer uitleg.
 
Het aantal spaties tussen tokens van statements heeft geen belang, ze zullen gereduceerd worden tot één spatie. Verwar dit niet met spaties tussen woorden in een constante.
Toch moeten we hier iets meer over uitweiden.
Ook de komma die gebruikt wordt om een instructie op een volgende regel verder te zetten zal vervangen worden door één spatie.
 
Laten we nu even kijken naar volgende statements:
Het aantal spaties tussen de tokens in de instructies heeft geen belang, ze zullen gereduceerd worden tot één blanco. Verwar dit niet met spaties tussen woorden in een constante.
x=1 ; y=2
Ook de komma die gebruikt wordt om een instructie op een volgende regel verder te zetten zal zonder andere voorzorgsmaatregelen vervangen worden door één spatie.
say x y /* Toont "1 2" */
 
say x y /* Toont evenzeer "1 2" */
Laten we even kijken naar volgende instructies:
if x y = '1 2' then say 'OK' /* "OK" want dit is waar! */
x=1
say xy /* "XY", want xy niet opgevuld */
y=2
say x &#124;&#124;y /* Toont "1 212", want concatenatie */
sayif x&#124;&#124;y=12 then say 'OK' y /* Toont"OK" want ook Waar! eveneens "1 2" */
if x y = '1 2' then say 'Waar' /* "Waar" want dit is waar! */
say xy /* Toont XY, want variabele xy niet opgevuld */
say x&#124;&#124;y /* Toont 12, want we plakken waarden samen */
if x&#124;&#124;y=12 then say 'Waar' /* ook "Waar"! */
if x&#124;&#124;,
y = 12 then say 'WaarOK' /* "OK" want eveneens "Waar" */
Tot zover het wel of niet samenvoegen van variabelen. Maar beschouwbestudeer nu ook volgende gevallenvoorbeelden aandachtig:
x=1 ; y=2
say x"\="y /* toont "1\=2" */
if x"\:"y then say 'WaarOK' /* Syntax error ! */
if x"-"y = '1-2' then say 'WaarOK' /* "WaarOK" ! */
if x"-"y = 1-2 then say 'WaarOK' /* Niets, want "1-2" is niet -1 */
Bestudeer laatste gevallen goed.
 
Wat we echter willen duidelijk maken is dat wanneer variabelen naast constanten worden gezet, geen concatenatieteken nodig is.
Maar wanneer constanten naast constanten worden gezet is het concatenatieteken meestal weer wel nodig:
say "Dit is een zin""!" /* Dit is een zin"! */
say "Dit is een zin"&#124;&#124;"!" /* Dit is een zin! */
say "Dit is een zin"'!' /* Dit is een zin! */
Bij het eerste voorbeeld wordt het dubbele aanhalingsteken door een enkel vervangen zoals we boven al leerden.
 
We willen hiermee duidelijk maken dat geen concatenatieteken nodig is wanneer variabelen aan constanten worden geplakt.
Maar willen we constanten aan constanten ketenen, dan is het concatenatieteken meestal wel nodig:
say "Dit is een zin""!" /* Dit is een zin"! */
say "Dit is een zin"&#124;&#124;"!" /* Dit is een zin! */
say "Dit is een zin"'!' /* Dit is een zin! */
Bij het eerste voorbeeld wordt het dubbele aanhalingsteken door een enkel vervangen zoals we al hadden geleerd.
<!--------------------------------------------------->
=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.
# '''RESULT''', bevat het resultaat van de laatst uitgevoerde functie.
# '''SIGL''', bevat het lijnnummer vanwaar men is gekomen met een '''signal''' instructieof '''call''' bevel.
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.
 
Een stem bestaat uit een geldig token, gevolgd door een punt. Zo zijn '"''jan.'''" en '"''p.'''" geldige namen vanvoor stems.
Zoals steedsvoor andere variabelen is de basiswaarde van een stem zijn eigen naam in hoofdletters, hier dus ''"JAN.''" en ''"P.'' in ons voorbeeld".
 
Een stem is enkel een impliciete definitie van een verzameling variabelen. Er zullen pas elementen in voorkomen indien we waarden toekennen aan '''samengestelde variabelen'''.
Een stem heeft geen gedefinieerdevoorgedefinieerde dimensie, er kunnen zoveel elementen aan toegevoegd worden als het geheugen van de computer toelaat.
<p id="SamVar">Een '''samengestelde variabele''' definieert dus een element van een stem. Ze is opgebouwd uit de naam van eende stem en een symbool dat na de punt is geplaatst. Dit tweede deel noemen we de staart (Engels: tail).
Zo zijn '''"jan.7'''", '''"jan.hello'''", '''"jan.i'''" en '''"jan.i.j'''" geldige elementen van de stem '''"jan.'''".</p>
 
jan.7 = 25
jan.hello = "Gisteren"
Regel 228 ⟶ 246:
j=7
jan.i.j=12
Tijdens de uitvoering zal REXX het token (de tokens) na het punt interpreteren. Hebben we een constante, zoals in jan.7 dan is ''"JAN.7''" de naam van het element van de stem ''"JAN.''". Dit element heeft in ons voorbeeld de waarde 27 gekregen.
 
In het tweede geval moetenstelt we teruggrijpen naar de fundamenten van REXX. ''"hello''" stelt een geldige variabele voor. Maar in onswaaraan voorbeeld hebben we erechter nergens een waarde aanis toegekend,. dusDus is haar impliciete waard ''"HELLO''" (haaren eigenis naam"JAN.HELLO" ineen element van de stem "JAN.". Dit element wordt een waarde "''Gisteren''" hoofdletters)toegewezen.
''JAN.HELLO'' is dus een element van de stem ''JAN.'' en zal de waarde ''Gisteren'' worden toegewezen.
 
In het derde geval, vanbij ''"jan.i''" zal REXX zien dat ''i'' de waarde 5 bevat, zodat het element nu ''"JAN.5''" zal noemen en de waarde 17 zal bevattenontvangen.
 
Net zo zal na de toekenning van de waarde "Hello" aan de variabele ''hello'', het element ''"JAN.Hello''" (let op de hoofd- en kleine letters), de waarde "Goeiedag" hebben gekregen.
 
In het geval ''van "jan.i.j''" tenslotte, hebben beide i en j een waarde gekregen en geven we dus het element ''"JAN.5.7''" de waarde 12. Op deze manier kan men een matrix met 2 (of meer) dimensies simuleren, doch voor REXX zijn het gewoon allemaal elementen van deeen stem.
 
Als een stem gebruikt wordt om een reeks elementen te bevatten, gebruikt men vaak numerieke staarten (jan.1, jan.2, ...). Er is dan een soort conventie dat het ''aantal'' elementen (de dimensie) dan in het element "''stem.0''" wordt gezetbijgehouden. Verplicht is dit niet, doch sommige programma's of functies volgen deze conventie om aan te geven hoeveel elementen ze als resultaat hebben terug gegeven.
Dit is niet écht verplicht, doch sommige programma's of functies volgen deze conventie om aan te geven hoeveel elementen ze als resultaat hebben terug gegeven.
 
Noteer dat na een eenvoudige assignatie zoalsals
piet. = 'Onbekend'
alleálle elementen van de stem deze ''standaardwaarde'' toekent (ook zij die reeds een waarde hadden). Dus zullen zowel ''PIET.7'' als ''PIET.Morgen'' een waarde "Onbekend" hebben zolang er geen andere waarde aan wordt toegekendgegeven.
 
Merk tenslotte op dat een samengestelde variabele er zeer complex kan uitzien:
a="Dit is een hele volzin"
jan.a=17
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.
Regel 256 ⟶ 272:
We kunnen deze buffer vergelijken met een stapel speelkaarten. Er kunnen kaarten onderaan of bovenaan worden toegevoegd. Ze worden steeds vanaf boven terug weggenomen.
 
Worden de kaarten/regels bovenaan bijgevoegd, dan zullen ze dus als eerste terug worden weggenomen en spreken we van '''LIFO''' (Last In, First Out). De laatst toegevoegde wordt als eerste terug weggenomen.
<br>Worden ze echter onderaan toegevoegd, dan zullen ze duspas als laatste terug van de stapel worden genomen en spreken we van '''FIFO''' (First In, First Out). De kaarten kruipen als het waren van onder naar boven, waarbij de oudst toegevoegde eerst worden weggenomen.
 
De bevelen die met de stack werken bespreken we in het volgend hoofdstuk.
 
{{Bericht
|titel=Besluit van dit hoofdstuk.
|bericht=In dit hoofdstuk leerden we over constanten, variabelen, bevelen en functies. We leerden de lees- en bewerkingstekens kennen. Ook hoe labels eruitzien en wat de stack eigenlijk is. De uitleg over stems mocht zeker niet ontbreken. Termen als token, assignatie en statement werden aangebracht.
 
Probeer in gedachten nog eens elk van deze dingen voor de geest te halen zodat we ze als gekend kunnen beschouwen bij het aanvatten van volgend hoofdstuk.
Er zijn verschillende instructies ('''[[Programmeren in REXX/Commando1#PARSE|PARSE]],'''
}}
'''[[Programmeren in REXX/Commando1#PULL|PULL]],'''
'''[[Programmeren in REXX/Commando1#PUSH|PUSH]],'''
'''[[Programmeren in REXX/Commando1#QUEUE|QUEUE]],''') die met de stack werken, en we zullen ze bestuderen in het volgende hoofdstuk.
{{sub}}
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.