#Klooienmetcomputers

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.

Arnout van Kempen di CCO CISA is directeur compliance & risk bij aaff, de fusieorganisatie van Alfa en ABAB. Hij schrijft op persoonlijke titel.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.