MainframeSupports
tip uge 39/2011:

Tilbage i uge 45/2008 skrev jeg et tip om, hvordan man i COBOL kan skrive "farven er rød, gul eller grøn" som FARVE = 'RØD' OR 'GUL' OR 'GRØN'. Det samme trick kan man ikke anvende i nogen andre af mig kendte programmeringssprog. I Nogen programmeringssprog som eksempelvis PASCAL og dets efterkommere (Delphi eksempelvis) kan man skrive FARVE IN [RØD, GUL, GRØN], dog kræver dette nogle ekstra erklæringer. IN findes som bekendt også i SQL, hvor det er muligt at skrive FARVE IN ('RØD', 'GUL', GRØN').

Men dette tip handler jo om PL/I, så hvordan kan du lave samme nummer i PL/I. Normalt er der jo ikke andet at gøre end at skrive FARVE = 'RØD' ! FARVE = 'GUL' ! FARVE = 'GRØN'. Normalt benyttes et udtryk af den nævnte beskaffenhed kun i forbindelse med IF sætninger, så derfor kan vi benytte SELECT i PL/I:

SELECT(FARVE);
  WHEN('RØD', 'GUL', 'GRØN') DO;
    /* processing of accepted colours */
  END;
  OTHERWISE;
END;

Sådan kan det faktisk gøres. Det virker måske som rimelig meget kode i forhold til en simpel IF ... THEN DO; /* processing */ END; men det er nemt at udvide med flere værdier, og hvis andre værdier skal behandles anderledes, så kan du nemt tilføje en WHEN for disse værdier. Det er stadig ikke lige så elegant som i COBOL. Bemærk i øvrigt den tomme OTHERWISE. Uden den vil PL/I brokke sig (abende) på eksekveringstidspunktet, hvis FARVE ikke er en af de værdier, der er nævnt i nogen WHEN.

Forrige danske tip        Last tip in english        Tip oversigten