Voorwaarden in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Na ons uitstapje gaan we nog even terug naar COBOL. Vanaf nu gaat het over programma-logica en dat betekent dat ik alle divisions achterwege zal laten, behalve de PROCEDURE DIVISION en ook daaruit vooral losse stukjes code om een kwestie te illustreren.
Wie zelf echt met COBOL aan de slag wil kan dat; ik heb aangegeven waar een COBOL-compiler voor kleinere systemen te vinden is. Wie met big iron aan de slag zou willen, zal zich naast COBOL ook moeten verdiepen in zaken als CICS, JCL en z/OS. En daar tussenin zijn er nog opties als IBM i. Heel realistisch lijkt me dat niet, dus ik concentreer me vooral op het lezen en begrijpen van COBOL-code.
COBOL kent een aantal mogelijkheden voor de evaluatie van voorwaarden. Een makkelijk leesbare is de IF-THEN-ELSE constructie. Omdat COBOL gericht is op begrijpelijkheid voor mensen met een voorkeur voor taal, wijst het zich eigenlijk vanzelf. Wat deze code doet, snapt u zonder enige uitleg:
IF x EQUAL TO 10
DISPLAY ‘x is 10’
ELSE
DISPLAY ‘x is niet 10’
END-IF.
Een variant is de EVALUATE constructie:
EVALUATE TRUE
WHEN x GREATER THAN 10
DISPLAY ‘x is groter dan 10’
WHEN X LESS THAN 10
DISPLAY ‘x is kleiner dan 10’
WHEN OTHER
DISPLAY ‘x is 10’
END-EVALUATE.
Hier horen enkele opmerkingen bij. In het begin staat EVALUATE TRUE, dat betekent dat alle voorwaarden na WHEN geldig zijn als deze de uitkomst TRUE hebben. Daar had dus ook getest kunnen worden op FALSE. Spannender is de laatste WHEN. Iedere logica zegt dat wat daar staat klopt; immers als x niet groter is dan 10 en evenmin kleiner dan 10, dan is x dus 10. Maar het is niet zuiver geprogrammeerd. Het enige dat je met zekerheid kan zeggen na WHEN OTHER is dat alle voorgaande WHEN-clauses geen TRUE hebben opgeleverd. Uitsluitend omdat alle voorgaande clauses samen alle opties behalve 10 uitsluiten, kan je stellen dat de laatste clause klopt. Maar zuiverder was geweest om gewoon op x=10 te testen, of een soort foutboodschap te geven die zegt "geen van de voorwaarden leverde true op".
Naast testen op gelijk, groter of kleiner zijn van twee waarden, kan je ook toetsen op type en op zaken als teken. Zo is dit een geldige test:
IF x IS NUMERIC
IF X IS POSITIVE
Hierbij test je eerst of x wel numeriek is en vervolgens of x een positieve waarde is.
Verder kent COBOL de mogelijkheid voorwaarden te combineren met AND, OR en NOT, zodat complexere voorwaarden kunnen worden geëvalueerd.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
Het Y2K-probleem
Arnout van Kempen over rommelen in een digitale wereld.
Over bits & bytes
Arnout van Kempen over rommelen in een digitale wereld.
En arrays dan?
Arnout van Kempen over rommelen in een digitale wereld.
Typecasting in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.