4.5 Voorwaardenamen

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

cartoon: kamer Nivo 88 'Cruijff, jij hebt nummer 14'

 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.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo