COBOL is een programmeertaal uit de jaren 60 die voornamelijk gebruikt wordt in zakelijke omgevingen. COBOL is de afkorting van COmmon Business Oriented Language (algemene zakelijk georiënteerde taal).

Oorsprong en standaardisatie COBOL is ontwikkeld in 1959 in opdracht van het Amerikaanse Department of Defense, onder meer door Grace Murray Hopper. Het moest een taal zijn die gemakkelijker te lezen, schrijven en onderhouden was dan de tot dan toe gangbare talen (assembleertaal en FORTRAN) en die daarnaast op meerdere typen computers inzetbaar moest zijn. De eerste versie van COBOL stamt uit 1960: COBOL-60.

De eis van computeronafhankelijkheid vormde een probleem, net als bij vrijwel elke computertaal. De thuisbasis van COBOL is het IBM-mainframe. Tegenwoordig draait COBOL daarnaast ook op onder meer Windows en Unix. In het verleden kwam COBOL tevens veel voor op Digital-computers als VAX en Alpha, met het besturingssysteem OpenVMS.

Van oudsher was de taal gericht op het makkelijk omspringen met (grote) gegevensbestanden in een batch-georiënteerde omgeving. Het gemak waarmee in COBOL de verwerking van gegevensbestanden wordt geprogrammeerd, maakt dat de taal tot op heden een koploperspositie inneemt op dit punt.Cobol Not Dead Yet, Computerworld.com, oktober 2006

De groep die de eerste COBOL-versie opgezet had, CODASYL (Conference On DAta SYstem Languages), kwam in 1961 met een nieuwe versie, COBOL-61, en in 1962 en 1963 kwamen daar nog aanvullingen op: COBOL-61-extended. Vanaf die tijd nam het gebruik van de taal toe en was het ook niet meer beperkt tot de Amerikaanse markt.

De volgende versie, de COBOL-74-standaard, werd door Codasyl opgesteld in nauwe samenwerking met ANSI.

De internationalisering van het gebruik van COBOL maakte dat de discussie over wie bepaalt wat er in de standaard komt een probleem vormde. Immers, ANSI is een puur Amerikaans instituut. Op initiatief van de Nederlander Wim Ebbinkhuijsen richtte ISO in 1979 een COBOL-expertsgroep op die de standaardisatie moet bewaken. ISO bepaalde na de nodige discussie de inhoud van de nieuwe versie: COBOL-85, uitgebracht in 1985.

De volgende versie van de standaard werd gepubliceerd in 2002: COBOL 2002. In deze versie is COBOL een multi-paradigmaprogrammeertaal geworden, doordat het nu ook mogelijk is om er objectgeoriënteerd mee te programmeren. Tevens werden vele nieuwe faciliteiten toegevoegd, zoals user-defined functions en het VALIDATE statement om op een simpele manier gegevens-controle te kunnen uitvoeren.

De recentste gestandaardiseerde versie is die van 2014, waarin onder meer de mogelijkheid van dynamische tabellen aan de taal is toegevoegd.

Wereldwijd zijn nog veel bedrijfskritische toepassingen in COBOL ontwikkeld.Automatisering Gids week 41/2004 Uit een onderzoek uit 2006 bleek echter dat 16% van de IT-managers COBOL onmiddellijk wilde uitfaseren, 36% geleidelijk uitfaseerde en nog eens 25% door kostenoverwegingen werd tegengehouden.

Imago COBOL heeft een ouderwets imago.Cobol is natuurverschijnsel - Opkrikken imago moet meer jongeren trekken, Computable.nl. Gearchiveerd op 27 november 2021. Dat komt doordat heel veel COBOL-programmatuur tientallen jaren oud is. Door de vele aanpassingen in uiteenlopende stijlen en het vasthouden aan verouderde tradities is die programmatuur veelal omslachtig en zwaar gecodeerd. De programmeertaal zelf wordt voortdurend verder uitgebreid en ontwikkeld. Veel organisaties kiezen daarom tegenwoordig dan ook voor migratie van oude COBOL-programmatuur naar modern COBOL.Computable 05-05-2008

Tot op zekere hoogte heeft ook de kritiek van de theoreticus Edsger Dijkstra het imago van COBOL negatief beïnvloed. Dijkstra stelde in de jaren zeventig: "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence." How do we tell truths that might hurt?, Edsger Dijkstra, 18 June 1975. Gearchiveerd op 1 april 2023. Deze uitspraak wordt soms beschouwd als een valide argument tegen COBOL.

Ondanks het ouderwetse imago zijn anno 2019 nog steeds COBOL-systemen in gebruik in Nederland,Queeste naar COBOL-kenners, Intermediair met name bij banken, verzekeraars en overheidsinstanties zoals AEGON, ING, ABN AMRO, Interpolis, RDW, DUOSogeti en DUO sluiten deal voor datamigratie, Computable.nl. Gearchiveerd op 7 april 2022. en de Gasunie. Zelfs sommige mobiele apps van banken draaien op de back-end in feite nog op COBOL.COBOL blijft nog een tijdje onder ons, Computerworld. Gearchiveerd op 7 april 2022.

Boeken Wim Ebbinkhuijsen heeft het Nederlandse standaardboek over COBOL geschreven en tot en met 2002 onderhouden. Ebbinkhuijsen hield zich strikt aan standaard COBOL. Het Duitstalige standaardwerk wordt onderhouden door Habib en Rozanski. Ook zij beperken zich tot exact de standaardtaal. Zij vermelden geen verschillen tussen eerdere ANSI-versies en vervallen reserved words worden ook niet genoemd.

In de Verenigde Staten vervullen Nancy en Robert Stern een vergelijkbare rol. Over verschillen tussen/met eerdere COBOL-versies verschaffen zij goed inzicht. Stern & Stern beperkt zich strikt tot het platform IBM-mainframe. Het werk van Gary DeWard Brown bevat informatie over COBOL op zowel IBM-mainframe als op PC onder Windows. Het boek COBOL Unleashed bevat algemene informatie over COBOL-varianten voor allerlei platforms en interfaces.

Versies en variaties COBOL is een van de eerste programmeertalen. COBOL heeft veel concurrerende programmeertalen achter zich gelaten. Volgens schattingen was eind jaren tachtig ongeveer 80% van alle business-software in COBOL geprogrammeerd.

In 1989 zijn intrinsieke functies toegevoegd, waaronder enkele die de millenniumbug omzeilen; de noodzaak om van die functies gebruik te maken werd binnen bedrijfsleven en overheden pas later onderkend. Ook de toevoeging van wiskundige functies was een opmerkelijk novum.

In 2002 volgde de uitbreiding met objectgeoriënteerd COBOL, schermaansturing vanuit de COBOL-code (dus niet afhankelijk van het platform), de mogelijkheid om zelf functies te programmeren, bitwise operators, floating-point-variabelen en nog veel meer.

COBOL is sinds 1968 een gestandaardiseerde programmeertaal. Daarnaast zijn er in de loop der decennia varianten van deze programmeertaal gevormd die dialecten lijken: afwijkingen of uitbreidingen. Veel afwijkingen zijn ontstaan om geoptimaliseerd gebruik te maken van de omgeving waarin ze draaien (besturingssysteem) of de specifiek gebruikte hardware.

Veel van de vernieuwingen in COBOL 2002 waren eerder door compilerfabrikanten als uitbreidingen ingebouwd en waren daardoor al beproefd. De oudste en meest beproefde innovatie was de SCREEN SECTION die Micro Focus ooit had bedacht, waarmee schermaansturing vanuit COBOL zelf kan worden geprogrammeerd.

Hieronder een opsomming van de versies van de gestandaardiseerde versie van COBOL.

Jaartal Naam 1959 COBOL 1960 COBOL 60 1961 COBOL 61 1962 COBOL 61 EXTENDED 1968 COBOL 68 ANS 1974 COBOL 74 ANSI 1985 COBOL 85 ANSI/ISO 1989 Uitbreiding van COBOL 85 met de intrinsieke functies ANSI/ISO 1997 OO COBOL bij veel compilerfabrikanten 2002 COBOL 2002 ANSI/ISO

Hieronder een opsomming van een aantal, deels historische, dialecten: IBM S/390 COBOL (VS COBOL II) IBM ILE COBOL IBM Visual Age COBOL HP COBOL II HP Micro Focus COBOL for HP UX Micro Focus Net Express MBP Visual COBOL AcuCorp COBOL CA Realia Liant RM COBOL Tandem SCOBOL (Screen COBOL) Tandem Non-Stop COBOL Fujitsu COBOL Data General ICOBOL Wang VS COBOL UNISYS COBOL Delta COBOL

De opensourcegemeenschap heeft ook een paar COBOL-compilerprojecten, te weten: OpenCOBOLopencobol.org TinyCOBOLtiny-cobol.sourceforge.net

Structuur COBOL is een procedurele programmeertaal, een derde-generatie-programmeertaal (ook: 3GL, van het Engelse third-generation language). Sinds de meest recente ISO/ANSI-standaard, COBOL 2002, is COBOL uitgebreid met de mogelijkheid om object-georiënteerd te programmeren. Object-georiënteerde talen worden doorgaans gezien als vierde-generatie-programmeertaal. Net als bijvoorbeeld C++ is COBOL een multi-paradigmaprogrammeertaal: de programmeur kan zowel procedureel als object-georiënteerd de code structureren.

Net zoals dat bij andere 3GL-programmeertalen het geval is, bestaat een COBOL-programma uit statements die gebundeld zijn in blokken. De indeling in blokken statements vloeit voort uit decompositie van de functionaliteit van het programma.

Deze blokken statements zijn geen functies, zoals in C. Dat wil zeggen: ze ontvangen geen parameters en geven geen returnwaarden. Parametrisering is alleen mogelijk tussen separate programma's en een programma omvat doorgaans exact één broncodebestand.

De manier waarop COBOL-programmeurs hun programma's indelen in blokken statements is wereldwijd in hoge mate uniform. Dat is het gevolg van de algemene acceptatie van Jackson Structured Programming (JSP) als dé standaard ontwerpmethode voor COBOL in de jaren zeventig. De originele methodiek van Jackson is in onbruik geraakt maar er zijn veel varianten ontwikkeld waarin verbeteringen zijn doorgevoerd.

De statements in COBOL zijn Engelstalige zinnetjes. Ze bestaan uit een werkwoord in de gebiedende wijs, dan een lijdend voorwerp en ten slotte eventueel een of meer bijwoordelijke bepalingen.

Een uitzondering op deze regel vormen conditie-statements (als - anders - dan en dergelijke). Doordat COBOL uit eenvoudig Engels bestaat, zijn de meeste statements voor niet-programmeurs direct leesbaar:

divide nettoprijs by 100 giving hulpbedrag multiply hulpbedrag by btw-percentage giving btw-bedrag add btw-bedrag to nettoprijs giving brutoprijs if aantal-aankopen > 25 subtract bonus from brutoprijs end-if

En hetzelfde zou ook als volgt kunnen worden geschreven:

compute btw-bedrag = nettoprijs / 100 * btw-percentage compute brutoprijs = nettoprijs + btw-bedrag if aantal-aankopen > 25 compute brutoprijs = brutoprijs - bonus end-if

Van oudsher wordt alle programmatekst in een COBOL-programma binnen de regels tussen de posities 8 en 72 geschreven en veel tekst mag pas beginnen op positie 12. "Alle tekst" wil zeggen de statements, de declaraties van variabelen, de koppeling met bestanden en dergelijke. Commentaartekst mag daarbuiten staan en letters die onbedoeld buiten de limiet staan, worden door de compiler niet als programmatekst verwerkt. Tegenwoordig dwingen de meeste compilers de traditionele positionering tussen schermkolom 8 en 72 en vanaf kolom 12 niet meer af. Vanwege de leesbaarheid echter houden veel programmeurs er toch graag aan vast.

De maximale regellengte was en is vaak nog 80 tekens. Dat is afkomstig van de beperkte breedte van ponskaarten die vroeger gebruikt werden om programma's in een computer te laden. De beeldschermen hadden dezelfde breedte van 80 tekens.

Terzijde: er is een oude, internationale traditie van COBOL-programmeurs om variabelen "velden" te noemen.

COBOL heeft een lange geschiedenis. Daardoor is er een grote kloof gegroeid tussen de doorsnee stijl in veel bestaande programmatuur en de stijl van hedendaags COBOL. Bestaande programmatuur is door de vele aanpassingen daaraan vaak in een wirwar van COBOL-stijlen geschreven.

Moderniseringen worden echter maar weinig toegepast en de verbreiding van COBOL 2002 is mondjesmaat. Een reden hiervoor is dat in oude COBOL-omgevingen vaak wordt vereist dat de programmeur in de oude stijl voortprogrammeert.

Voorbeelden Om een miniatuur-idee te geven van hoe de programmeertaal er qua structuur uitziet, volgen hieronder als voorbeeld twee uitwerkingen van een simpele “Hello world”-applicatie.

Voorbeeld 1: legacy-stijl COBOL

000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. HELLOWORLD. 000030 DATE-WRITTEN. 10/08/04 00:04. 000040 AUTHOR. UNKNOWN AUTHOR. 000050 000100 ENVIRONMENT DIVISION. 000200 CONFIGURATION SECTION. 000210 SOURCE-COMPUTER. MAINFRAME. 000220 OBJECT-COMPUTER. MAINFRAME. 000230 000300 DATA DIVISION.