Typecasting in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Vorige keer hebben we in behoorlijk detail bekeken hoe types werken in COBOL. In feite kent COBOL het begrip 'type' niet, maar gebruikt het de picture clause om exact te beschrijven hoe een waarde van een variabele er uit gaat zien. Speciaal voor financiële mensen zitten in COBOL aardigheidjes als de keuze om het minteken van een negatief getal voor of juist achter het getal te plaatsen. Floating point is mogelijk, maar zelden echt nodig in ons soort omgevingen.
COBOL doet niet moeilijk over type casting zoals we dat in C en Rust ook kennen, met dat verschil dat COBOL het eigenlijk altijd impliciet doet en zelden nodig heeft. Ter herinnering, in C kan je zoiets zeggen als
int a = 10;
float b = 3.5;
float resultaat = a + b.
Dit is een impliciete type cast van a naar een float, om de berekening mogelijk te maken. De uitkomst zal netjes 13.5 zijn, zoals je verwacht. In COBOL werkt het eigenlijk net zo, maar altijd impliciet.
Als je de volgende data hebt gedefinieerd:
01 A PIC 9(3) VALUE 10.
01 B PIC 9(3)V99 VALUE 3.5.
01 RESULTAAT 9(3)V99.
En in je procedure staat
ADD A B GIVING RESULTAAT.
Dan converteert COBOL A eerst naar 10.00, telt daar 3.50 bij op, en RESULTAAT krijgt de waarde 13.50.
Overigens had je ook COMPUTE RESULTAAT = A + B. kunnen gebruiken, als je toch stiekem wel graag met formules rekent. Wat wel geldig COBOL is, maar hier niet bruikbaar was geweest is ADD A TO B. Hierbij zou B het resultaat bevatten en dat was de bedoeling niet.
Kortom, type casting werkt in COBOL net zo makkelijk als impliciete type casting in C, met dezelfde waarschuwingen: als het resultaat niet past, kan je onverwachte uitkomsten krijgen. Expliciete type casting bestaat in COBOL niet. Maar door de enorme vrijheid en exactheid die COBOL in de picture clause kent, is type casting eigenlijk vrijwel nooit nodig.
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
Voorwaarden in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
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.
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.