Programmeren in REXX/Fundamenten: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
Redirect uitschakelen
GuyDC (overleg | bijdragen)
Toevoegingen, herstructureren, verbeteren tekst
Regel 19:
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.
 
Lees [http://www.rexxla.org/rexxlang/mfc/rexxadv.html hier] wat Mike Cowlishaw, de "uitvinder" van REXX, als voor- en nadelen van zijn programmeertaal opsomt.
<!--------------------------------------------------->
=Bouwstenen=
Een REXX programma bestaatis opgebouwd uit een reeks zinnen die opgebouwd zijn uit:
*een of meer spaties, die genegeerd worden;
* commentaren
*een reeks "tokens" (zie verder);
* constanten
*geen of een reeks spaties die ook genegeerd worden;
* getallen
*een punt-komma dat de zin afsluit. Aan het eind van een lijn is deze optioneel.
* symbolen (instructies of variabelen)
Daarnaast kan het programma doorspekt zijn met commentaren (zie verder).
* functies
 
* labels
Elk van deze zinnen&nbsp;- die we vanaf nu liever '''statements''' noemen&nbsp;- wordt één voor één geanalyseerd en uitgevoerd. De analyse gebeurt van links naar rechts. Dit laatste kan soms van groot belang zijn.
 
De term '''token''' staat voor de bouwstenen waarmee REXX statements zijn opgebouwd. De tokens kunnen gelijk welke lengte hebben, tenzij er limieten worden opgelegd door de implementatie. Het beschikbaar geheugen is anders de ultieme limiet.
 
De soorten tokens zijn:
* constanten
* symbolen (instructies, functies of variabelen)
* getallen
*operatoren
*speciale syntactische tekens
* labels
 
Laten we al deze elementen in detail bekijken, te beginnen met commentaren.
<!--------------------------------------------------->
==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 voorkomenvoorkomt, kan het mislopen.
 
Op sommige systemen moet een REXX programma beginnen met een commentaar op de eerste positie, desnoods een ''leeg'' commentaar zoals in een volgendevolgend voorbeeld.
Andere implementaties of systemen vereisen dat niet. Toch blijft het een goede gewoonte om het programma te beginnen met een korte beschrijving,
eventueel aangevuld met de naam van de programmeur, een creatiedatum en de historiek van de veranderingen. Ook als het programma moet kunnen gebruikt worden op verschillende systemen is het veilig te starten met een commentaar in de eerste positie.
/* */
say "Hello" /* Dit zal Hello op het scherm zetten */
/* Deze lijnen zijn
/* écht waar ! */
allemaal
allemaal commentaar */
if i=5 /* en alleen dan */ then say "Adieu"
<!--------------------------------------------------->
Regel 51 ⟶ 66:
definieert een constante (een zin). Omdat in de zin een apostrof nodig is, wordt de zin omgeven door de dubbele aanhalingstekens.
 
Een anderealternatieve oplossing bestaat er hier inerin om het apostrof-teken te ontdubbelen, dus:
say 'Nice weather, isn&rsquo;&rsquo;t it?'
Daar dit minder leesbaar is, gebruiken we deze oplossing enkel in die gevallen waar het niet anders kan, bijvoorbeeld omdat zowel apostrof als dubbel aanhalingsteken nodig is in de contante.
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
DezeHiermee notatiekunnen laat o.a. toebijvoorbeeld onleesbare controlekarakters tegebruikt plaatsenworden.
 
Constanten worden dus "letterlijk" genomen door het programma en zijn als dusdanig een element van een statement tijdens de uitvoering.
<!--------------------------------------------------->
==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. Een enkele 0 voor het decimaal punt mag weggelaten worden.
 
Dit zijn allemaal geldige getallen:
17 98.07 -101 .14 12.2e6 73e-128 '-17.9' ' 11.22 '
De laatste 2 getallen (als een constante voorgesteld) zijn evengoed geldig, want we leerden al dat REXX alles opslaat als karakterreeksen tot eventueel blijkt dat er moet mee gerekend worden. Spaties worden in berekeningenuiteraard niet meegenomen in de berekeningen.
<!--------------------------------------------------->
==Symbolen==
Regel 72 ⟶ 89:
Op z'n minst kunnen volgende karakters gebruikt worden:
A tot Z, a tot z, 0 tot 9, . (punt) en _ (liggend streepje)
Als een symbool niet met een cijfers of een punt begint, dan kan het een variabele voorstellen. Dit betekent dat men er een waarde kan aan toekennen.
Cijfers en het punt mogen echter niet als eerste voorkomen.
 
Dus, een symbool zal, al naargelang zijn plaats in het programma, beschouwd worden als een variabele of als een instructie (bevel, functie).
De term ''woorden'' moet dus in een brede context gezien worden, want er kunnen naast letters ook andere tekens in voorkomen. Daarom zullen we vanaf nu liever gebruik maken van de Engelse term '''token'''. Deze wordt ook in de REXX boeken gebruikt.
 
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, beschouwd als variabelen of als instructies (commando's).
 
De initiële waarde van een token is gelijk aan zijn naam in hoofdletters. Dus zullen 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 commandobevel datom, wat erop volgt, op het scherm moetaf afdrukkente drukken. Het token '''A''' zal als variabele gezien worden vermits het niet tussen aanhalingstekens staat en dusniet geenmet constanteeen is.cijfer Nergensof werdpunt hierbegint. eenVermits waardein toegekenddit aanvoorbeeld diegeen variabele,waarde dus,werd toegekend blijft haar initiële waarde blijft zolang "A",. en hetHet zal diehier dus een letter "A" zijn die we op het scherm zullen zien verschijnen.
{{Bericht
|titel=Hoofdletter-ongevoelig (Case-insensitive)
Regel 86 ⟶ 101:
|type=waarschuwing}}
 
In onderstaand voorbeeldje is het symbool "do" op de eerste regel tweemaal gebruikt. De eerste maal is het een instructiebevel en de tweede maal een variabele.
do do=1 to 10
say do
end
Dit is een perfect geldig dochstatement, doch omwille van de leesbaarheid, ten stelligste af te raden. Gebruik geen variabel-namen die overeenkomen met die van een commandoinstructie (of functie).
<!--------------------------------------------------->
 
Speciale vormen van symbolen zijn dus bevelen en functies:
==Bevelen==
<!--------------------------------------------------->
===Bevelen===
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/Bevelen,_deel_1#ARG|ARG]]''',
Regel 115 ⟶ 131:
'''[[Programmeren in REXX/Bevelen,_deel_1#SELECT|SELECT]]''',
'''[[Programmeren in REXX/Bevelen,_deel_2#SIGNAL|SIGNAL]]''' en
'''[[Programmeren in REXX/Debugging#TRACE|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''. DochVerwar dit kanniet ookmet leideneen totvolledige verwarringprogrammalijn, metdie we een volledigestatement programmalijnnoemen.
<!--------------------------------------------------->
===Functies===
Functies komen ook later uitgebreid aan bod. Hun 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.
Regel 127 ⟶ 144:
Het is tenslotte mogelijk eigen functies te schrijven.
 
TochWe geven toch een voorbeeldje van een (basis-)functie hier:
a="tekst"
say '''length'''('Dit is een tekst' a)
Dit zijn de stappen die door de REXX interpreter worden uitgevoerd (herinner u, de interpretatie werkt van links naar rechts):
De functie '''length''' geeft de lengte van zijn parameter terug. Als eerste tussenstap van de interpretatie door REXX zal het deel "length('Dit is een tekst')" vervangen worden door het getal &#171;16&#187;. Daarna zal het bevel "say" zorgen dat dit getal op het scherm wordt afgedrukt.
#het token "a" is niet gekend als bevel of functie, maar is wel een geldige naam voor een variabele;
#het gelijkheidsteken beveelt om een waarde toe te kennen aan de variabele (assignatie);
#de toegekende waarde is alles tot aan het einde van het statement (hier impliciet het einde van de zin). De variabele ''a'' krijgt dus de waarde "tekst"
#het token "say" wordt herkend als een bevel dat alles wat volgt tot aan het einde van het statement op het scherm moet afdrukken;
#het token "length" wordt vervolgens herkend als een standaardfunctie die de lengte van zijn parameter moet opzoeken en teruggeven;
#het deel tussen haakjes is de eerste, en in dit geval enige parameter voor de functie. REXX ontdekt dat het een constante is, gevolgd door een variabele, dus
de variabele wordt door haar waarde vervangen, en de parameter wordt uiteindelijk "Dit is een tekst";
#de functie '''length''' telt nu het aantal karakters en komt tot de waarde 16;
#het bevel '''say''' drukt het getal 16 af op het scherm.
<!--------------------------------------------------->
==Labels==
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.