In een COBOL-programma komen de volgende regels voor:
if dagcode = 6 then move 0.5 to toeslag else if dagcode = 7 then move 1 to toeslag end-if end-if * dagcode: 1=ma, 2=di 3=wo enz.
Als je dit stukje programma bekijkt, dan kun je vermoeden dat het gaat om een beloningsprogramma. Voor overwerk op zaterdag (dagcode is 6) geldt een toeslag van 50% (0.5). Voor overwerk op zondag geldt een toeslag van 100% (1 keer het salaris extra). Wie het programma leest, weet waarschijnlijk niet meteen wat dagcode 6 voorstelt en daarom heeft de programmeur een commentaarregel toegevoegd om de betekenis van de dagcodes uit te leggen. In zekere zin is het een goede programmeur geweest die dit heeft gecodeerd. Hij heeft de volgende richtlijn gehanteerd: geef commentaar waar dat nodig is.
Maar eigenlijk zijn we niet geïnteresseerd in de waarde van de variabele dagcode. Nee, we willen weten of het een zaterdag of een zondag was. Om dat te weten te komen, kijken we naar het getal dat in dagcode staat. Maar het is een omweg. Het zou veel duidelijker zijn als we mochten schrijven:
if zaterdag then move 0.5 to toeslag else if zondag then move 1 to toeslag end-if end-if
Een van de leuke dingen aan COBOL is dat dit kan. Wat hierboven staat is correct COBOL. We gebruiken het woord zaterdag als een soort afkorting voor dagcode = 6. Het woord zondag fungeert als een verkorte schrijfwijze voor dagcode = 7.
Een computer is niet helderziend. Uiteraard moeten we de computer van te voren vertellen welke afkortingen we gebruiken. Dat doen we bij de beschrijving van het veld waarvoor de afkorting geldt. In de data division is daarvoor een apart niveaunummer beschikbaar: het getal 88.
illustratie: Geert Nijmolen
01 dagcode picture 9. 88 zaterdag value 6. 88 zondag value 7.
Het niveaunummer (level number) 88 heeft niets te maken met de indeling van een veld. Daarvoor mogen we uitsluitend de niveaunummers 01 tot en met 49 gebruiken.
onthoud
De naam die we bij een 88-niveau schrijven heet in COBOL een voorwaardenaam (Engels: condition name). Een voorwaardenaam geldt als een verkorte schrijfwijze voor een relatie-voorwaarde.
Bovenstaande beschrijving met het getal 88 vertelt de computer:
- als ik zaterdag schrijf, dan bedoel ik dagcode = 6;
- als ik zondag schrijf, dan bedoel ik dagcode = 7.
Het aantal mogelijkheden van voorwaardenamen is nog groter. We hoeven ons namelijk niet te beperken tot één waarde. We kunnen een opsomming geven van waarden of een reeks van waarden noteren bij een voorwaardenaam.
01 dagcode picture 9. 88 maandag-vrijdag value 1 thru 5. 88 zaterdag value 6. 88 zondag value 7. 88 dagcode-fout value 0, 8, 9. 88 weekend value 6, 7.
In dit voorbeeld is de voorwaardenaam maandag-vrijdag gekoppeld aan de reeks waarden 1 tot en met 5. Als we in een COBOL-programma schrijven:
if maandag-vrijdag ...
Dan komt dat overeen met de voorwaarde:
if dagcode = 1 or dagcode = 2 or dagcode = 3 or dagcode = 4 or dagcode = 5 ...
Je ziet wat een voordeel het kan geven om te werken met voorwaardenamen; de opdracht is niet alleen veel korter, maar ook veel duidelijker.
De voorwaardenaam dagcode-fout is gekoppeld aan de waarden 0, 8 of 9. De voorwaardenaam weekend is verbonden met de waarden 6 of 7. Het volgende voorbeeld bevat deze voorwaardenamen.
perform with test after until dagcode numeric and not dagcode-fout accept dagcode end-perform if weekend then perform controleer-datum end-if
De herhaling blijft aan de gang totdat aan de volgende twee voorwaarden is voldaan: de dagcode moet numeriek zijn en niet fout, dus niet 0, 8 of 9. Verder zien we in dit voorbeeld een if-opdracht waarin wordt gevraagd of de ingevoerde dagcode op een weekend slaat. De computer kijkt of dagcode gelijk is aan 6 of gelijk is aan 7 (dan is het weekend). Als het inderdaad een weekend betreft, dan voert hij de opdracht perform controleer-datum uit.