MainframeSupports
tip uge 13/2003:

REXX er et ret udbredt programmeringssprog på mainframe platformen, men hvor meget ved vi egentlig om dette omfangsrige sprog? Jeg og enkelte andre er i hvert fald blevet temmelig overraskede over den måde REXX laver sammenligninger. Overraskelsen bunder i det faktum, at REXX ikke har nogen datatyper. Variable bliver jo ikke erklæret, som vi kender det fra stort set samtlige andre programmeringssprog.

Følgende REXX illustrerer glimrende problemstillingen:

/* REXX */
A = '2 '
B = ' 2'
IF A = B
THEN
  SAY 'A = B'
ELSE
  SAY 'A <> B'
IF A == B
THEN
  SAY 'A == B'
ELSE
  SAY 'A \== B'

Og hvad forventer du, at denne lille REXX vil gøre? Med afsæt i virkemåden af de fleste andre programmeringssprog, så vil ovenstående program ikke engang kunne eksekveres, fordi det er fyldt med syntaksfejl. PL/1 og COBOL kan ikke klare sammenligningen A == B, mens C og C++ står af på sammenligningen A = B. Men i REXX er programmet fuldt lovligt og det overraskende resultat er, at A = B er sand, mens A == B er falsk.

Ved brugen af A = B vil REXX før sammenligningen evaluere indholdet af de to variable. Hvis de begge to evaluerer til noget numerisk ( som i dette tilfælde), så vil REXX foretage en numerisk sammenligning. De fleste af os mainframe folk med baggrund i PL/1 eller COBOL synes ikke dette resultat er særligt logisk. Faktisk kan det give anledning til mange timers intensiv fejlsøgning før pointen åbenbarer sig i al sin magt og vælde. Her kommer A == B ind i billedet.

Ved brugen af A == B vil REXX foretage en ren sammenligning byte for byte uden nogen forudgående evaulering. Det betyder blandt andet, at to tegnstrenge, der ikke er lige lange eksempelvis 'ABC' og 'ABC  ' ikke er ens ved en A == B sammenligning. Faktisk har REXX et helt arsenal af såkaldte strict comparison operatorer som eksempelvis << og >>, som altså ikke betyder meget større end eller meget mindre end, som det kendes fra matematikken. Og det er også rart at vide, at /== i REXX betyder det præcist modsatte af ==.

Forrige danske tip        Last tip in english        Tip oversigten