Programmeren in REXX/Fundamenten: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
Toevoeging uitleg over labels |
Kleine verbeteringen |
||
Regel 1:
{{Programmeren in REXX}}
=Fundamenten van REXX=
In dit
==Typische kenmerken==
Regel 11 ⟶ 10:
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 (
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
Velen beschouwen REXX in eerste instantie enkel als een vervanger voor scripting (BAT-files).
==Bouwstenen==
Regel 30 ⟶ 29:
Commentaren kunnen over meerdere lijnen gaan en een commentaar kan een ander commentaar bevatten (geneste commentaren).
Andere implementaties of systemen vereisen dat niet. Toch blijft het een goede gewoonte om het programma te beginnen met een korte beschrijving,
en eventueel zelfs de naam van de auteur, creatiedatum en historiek van veranderingen.
/* */
say "Hello" /* Dit zal Hello op het scherm zetten */
Regel 53 ⟶ 54:
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
===Symbolen===
Met symbolen bedoelen we ''woorden'' bestaande uit
A tot Z, a tot z, 0 tot 9, @ # $ ¢ . ? | _▼
Welke karakters kunnen gebruikt worden hangt af van het systeem waarop men werkt en van de codepages die gebruikt worden. Er is ook een verschil tussen ANSI (PC) en EBCDIC (mainframes).
Op z'n minst kunnen volgende karakters gebruikt worden:
Cijfers en het punt mogen niet als eerste voorkomen.
De term ''woorden'' moet dus in een brede context gezien worden, want er kunnen naast letters ook andere tekens voorkomen. In het Engels spreekt men van '''token'''s, en omdat de term ''woorden'' een meer beperkte betekenis heeft, zullen we liever deze Engelse term verder
Elke token is van andere gescheiden door één of meer blanco karakters of bewerkingstekens.
Regel 71 ⟶ 75:
{{Bericht
|titel=Karaktergrootte onbelangrijk (Case-insensitive)
|bericht=
|type=waarschuwing}}
Regel 95 ⟶ 99:
'''[[Programmeren in REXX/Commando2#QUEUE|QUEUE]],'''
'''[[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
===Functies===
Regel 103 ⟶ 107:
waarbij het open-haakje zonder spatie na de functienaam moet komen.
Standaard bezit de REXX taal reeds een hele reeks standaardfuncties. Een opsomming zou ons hier dus te ver leiden. We komen de meeste ten gepaste tijde wel tegen.
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'''
===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). Een label wordt gevormd door een token gevolgd door een dubbel punt
signal MijnLabel /* We springen verder */
[instructies]
Regel 123 ⟶ 129:
Ook voor labels geldt dat ze ''case-insensitive'' 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.
===Leestekens===
Regel 130 ⟶ 138:
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====
Regel 136 ⟶ 144:
/* Meerdere instructies op één regel */
Say "Hello" ; say "Nice weather, isn't it?"
{{Bericht
|titel=Programma opbouw
|bericht=REXX interpreteert regel per regel (Engels: statement). Met een regel bedoelt men een reeks tokens beëindigd met:
* het einde van een lijn (een line-end, een CrLf bvb), tenzij een vervolgteken werd gebruikt.
* een scheidingsteken (;)
* soms een impliciet scheidingsteken binnen een instructie.
Als we '''if voorwaarde then instructie else instructie''' schrijven, hebben we eingelijk
'''if voorwaarde; then; instructie;else;instructie''' geschreven.
|type=info}}
====Bewerkingstekens====
Regel 155 ⟶ 173:
==Concatenatie==
De term '''concatenatie''' die we bij het bewerkingsteken || hebben gebruikt komt van het Engelse werkwoord '''to concatenate''' en betekent:
Toch moeten we hier iets meer over uitweiden.
Regel 204 ⟶ 222:
Een stem heeft geen gedefinieerde dimensie, er kunnen zoveel elementen aan toegevoegd worden als het geheugen van de computer toelaat.
Een '''samengestelde variabele''' is opgebouwd uit de naam van een 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.'''.
Regel 226 ⟶ 244:
In het geval ''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 allemaal elementen van de stem.
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 zoals
piet. = 'Onbekend'
alle elementen van de stem
Merk tenslotte op dat een samengestelde variabele er zeer complex kan uitzien:
|