COBOL

**COBOL** (***CO**mmon **B**ussines-**O**riented **L**anguage*ren akronimoa; euskaraz: Enpresa Aplikazioetara Zuzendutako Lengoaia Orokorra) 1959tik 1961era bitartean bideraturiko konpilatutako programazio-lengoaia da. Lengoaia inperatiboa, prozedurazkoa, eta, 2002tik aurrera, objektuei bideratutakoa da. Oinarri gisa ingelesa erabiltzen du, hitzak erabiliz eta puntuazioa saihestuz.

COBOL oraindik oso erabilia da ordenagailu nagusietan zabaldutako aplikazioetan, hala nola eskala handiko batch eta transakzioen prozesaketa lanetan. Finantza-erakunde handi asko 2006an hasi ziren lengoaian sistema berriak garatzen, baina gaur egungo COBOLen programazio gehiena lehendik zeuden aplikazioak mantentzeko soilik da. Programak plataforma berrietara eramaten dira, hizkuntza modernoetan berridazten dira, edo beste software batekin ordezkatzen dira.

COBOLen diseinua 1959an hasi zuen CODASYLek, eta, neurri batean, Grace Hopperrek diseinatutako FLOW-MATIC programazio-lengoaian oinarritu zen. AEBetako Defentsa Sailaren ahalegin baten barruan sortu zen, datuak prozesatzeko programazio-lengoaia eramangarri bat sortzeko. Hasiera batean, aldi bateko soluzio gisa ikusi zen, baina Defentsa Sailak berehala presionatu zituen informatika-fabrikatzaileak lengoaia erabil zezaten, eta, ondorioz, informatika munduan hedatu zen. 1968an estandarizatu zen, eta bost aldiz berrikusi da. Berrikuspen hauek programazio egituratu eta objektuei bideratutako laguntza barne hartzen dute. Gaur egungo estandarra ISO/IEC 1989:2023 da.

COBOLen enuntziatuek **MOVE x TO y** bezalako prosazko sintaxia dute, autodokumentatua eta ingeleseko hiztunentzat oso irakurgarria izateko diseinatua izan zena. Hala ere, hitz asko erabiltzen ohi ditu, beste lengoaien sintaxi labur eta matematikoki inspiratuarekin alderatuta. COBOLek 300 gako-hitz baino gehiago ditu. Hau kopuru altua da, garaiko beste lengoaiekin konparatuta (FORTRANek, adibidez, 103 gako-hitz ditu).

COBOLen idatzitako programak lau zatitan banatzen dira: *Identification*, *Enviroment*, *Data* eta *Procedure* (euskaraz, Identifikazioa, Ingurunea, Datuak eta Prozedura). *Identification* sailak programaren izena zehazten du, eta programaren informazio orokorra du, hala nola egilearen izena, idatzi zen data eta erabileraren deskripzio txiki bat, eta programatzaileak erantsi nahi dion beste edozein agiri. *Enviroment* sailak zehazten du zein ekipo ari diren erabiltzen, eta programan sartzeko eta irteteko erabiltzen diren fitxategiak. *Data* sailak programan erabiltzen diren datuak deskribatzen ditu. *Procedure* sailak, berriz, programaren ekintzak diktatzen dituen prozedura-zatia hartzen du. Atalen, paragrafoen eta perpausen hierarkia zurruna da. COBOLek liburutegi estandar handirik ez dauka, eta estandarrak 43 adierazpen, 87 funtzio eta klase bakarra zehazten du.

COBOL kritikatua izan da bere hitz kopuru handiagatik, diseinu-prozesuagatik, eta egituratutako programak idazteko zailtasunengatik. Ahulezia horien ondorioz, askotan, COBOL programa monolitikoak sortzen dira, osotasunean ulertzeko zailak direnak, nahiz eta zati partikularrak ulergarriak izan.

Urteetan, COBOL programazio-lengoaia gisa onartu da negozio-eragiketetarako sistema nagusietan, nahiz eta, azken urteetan, COBOL eragiketa asko hodei-konputaziora eraman diren.

## Historia 
1959ko apirilaren 8an, Mary K. Hawesek, Burroughs Corporationentzat lan egiten zuen programatzaileak, bilera bat antolatu zuen akademiako ordezkarien, ordenagailuen erabiltzaileen eta fabrikatzaileen artean Pennsylvaniako Unibertsitatean. Bilera negozio-lengoaia komunei buruzkoa izan zen. Bileran Grace Hopperek (FLOW-MATIC ingelesean oinarritutako prozesu-lengoaiaren asmatzaileak), Jean Sammetek eta Saul Gorek parte hartu zuten.
alt=Paper zati bat, linea bakoitzan 0tik 9ra zenbakiak daukala. Paperrak zulo laukiak ditu zenbaki batzuetan.|thumb|1981ko COBOL programa bat fitxa zulatu batean.

Sortzailea CODASYL batzordea izan zen, 1959ko maiatzean ordenagailu-fabrikatzaileek, erabiltzaileek eta Estatu Batuetako Defentsa Sailak osatua. Lengoaiaren definizioa sei hilabete pasatxoan osatu zen, eta batzordeak 1960ko urtarrilean onartu zuen. COBOL lengoaia Grace Hopper ofizialaren FLOW-MATIC lengoaian eta Bob Bemerren IBM COMTRAN lengoaian inspiratuta diseinatu zen, biak batzordekide izan baitziren.

COBOL erabiltzaileen laguntzari esker, lengoaia azkar aurreratu zen, eta 1961etik 1965era berrikusi zen funtzionalitate berriak gehitzeko. 1968an atera zen lengoaiaren lehen ANSI bertsioa, eta gerora berrikusi egin zen, 1974an (COBOL ANS-74), 1985ean (COBOL ANS-85, 1989an zabaldua, funtzio matematikoekin, eta gaur egungo estandar erabiliena, COBOL-ANSI izenekoa, amaitu zen) eta 2002an (COBOL ANS-2002).

Azken estandarra COBOL 2023 da. COBOL 2014ren zuzenketa tekniko bat da, aljebra boolearrean eta mezu-bidalketan hobekuntzak dituena, besteak beste. 

IBM Enterprise Cobol bertsio bat dago, erregularki eguneratua eta 1991n merkaturatua, Ostalarietan (Sistema Nagusi) erabilia z/OS pean.

Windows eta Linuxerako, aspalditik existitzen diren eta modernizatzen jarraitzen duten hainbat konpiladore eta IDE daude.

* MicroFocus Visual Object COBOL For Windows 95 (IDE zaharrena, erabiltzaile interfaze grafikoak sortzeko eta WinAPI erabiltzeko aukera ematen duena.)
* MicroFocus NetExpress (IDE berriena, Java, EJB eta C erabilzeko aukera ematen duena. Objektuei bideratutako bertsioa ere badu, OO COBOL.
* MicroFocus Visual COBOL (Visual Studio eta Eclipserako bertsioa)
* RM/COBOL
* Fujitsu COBOL
* Fujitsu NetCOBOL for Windows
* Fujitsu NetCOBOL for .NET
* Fujitsu PowerCOBOL 

* GnuCOBOL (Open COBOLren bertsio berria, kode irekikoa)
* Raincode COBOL
* COBOL-IT

## Ezaugarriak 
COBOL programa autodokumentatuak idazteko diseinatu zen. Horretarako, prozedura-aldagaiak adierazteko dibisiotan banatu zen, programa bat nork eskatu zuen eta nork idatzi zuen erregistratzeko asmoarekin. Helburuak helburu, hasieran zuen egitura ez zen nahikoa korporazio-negozioen sistemek behar duten egitura modularrerako.

COBOLen datu-motak fitxategi ordenatuekin lan egiteko pentsatuta zeuden. Beraz, erregistro eta aldaeretarako egiturak eta indexatutako fitxategientzako gako-hitzak ditu.

`PICTURE` gako-hitzaren bidez definitzen diren datu atomiko motak eremu egituratuetan defini daitezke. Horrela, zenbakiak bitar bihurtzean sortzen diren biribiltze-erroreak saihesten dituzten zenbakiak defini daitezke. Hori garrantzitsua da ingurune komertzialetan edo kalkulu oso zehatzak behar diren ingurunetan. COBOLek, lehenespenez, zenbaki-sistema hamartarreko zenbakiak erabil ditzake eta erabiltzen ditu. Hau ez da sistema bitarra bezain eraginkorra, baina zenbaki dezimal zehatzak definitzeko aproposagoa da.

COBOL programak sortzea errazteko, sintaxia ingelesaren antzekoa izateko moduan sortu zen, ondorengo programazio-lengoaietan nagusitu ziren sinboloak erabiltzea saihestuz.

Hala eta guztiz ere, 1980ko hamarkadaren hasieran zaharkituta geratu zen COBOL, programazio-paradigma berriei eta haiek ezartzen zituzten lengoaiei dagokienez. 1985eko berrikuspenean, COBOLi aldagai lokalak, errekurtsibitatea, memoria dinamikoaren erreserba eta programazio egituratua gehitu zitzaizkion.

2002ko berrikuspenean COBOLi objektuetarako orientazioa gehitu zitzaion, nahiz eta 1974ko berrikuspenaz geroztik objektuetarako orientazioaren antzeko lan-ingurunea sor zitekeen. Horretaz gain, lengoaiari pantaila grafikoak sortzeko metodo estandarizatua gehitu zitzaion.

Ezaugarri berriak estandar ofizialean sartu aurretik, konpiladore-fabrikatzaile askok modu ez-estandarrean gehitzen zituzten. Gaur egun, prozesu hori ikus daiteke COBOLen eta Interneten integrazioan. Hainbat konpiladore daude COBOL scripting lengoaia eta web zerbitzu gisa erabiltzeko aukera ematen dutenak. .NET eta EJB plataformetarako COBOL kodea sortzeko aukera ematen duten konpiladoreak ere badaude. Cobol Programa baten egitura 4 zatik osatzen dute:

# **IDENTIFICATION DIVISION**: Programaren identifikatzailea da, eta honako datu hauek jasotzen ditu: informazioa, egilearen izena, konpilazio-data, etab.
# **ENVIRONMENT DIVISION**: Programa exekutatzen den hardware-baliabideak adierazten ditu, baita komunikabideen bidez informazio-irteeraren esleipena ere.
# **DATA DIVISION**: Sail honetan sistemak erabiliko dituen aldagaiak eta fitxategien aitorpena ezartzen dira.
# **PROCEDURE DIVISION**: Izenak dioen bezala, kodifikatutako jarraibideak exekutatzen dira.

## Erabilera 
Jende askok COBOL lengoaia gaur egun erabiltzen ez dela uste duen arren, batch prozesaketak egiteko gaitasun handia behar duten ia sistema guztiek COBOL erabiltzen dute, bai banketxeek eta baita sistema nagusi zentralak dituzten beste enpresa handi batzuek ere. Horri esker, sistema zaharren eta modernoenen arteko bateragarritasuna bermatzen da, eta lengoaia erabat egonkorra eta frogatua dela ziurta daiteke. Gartner Group-ek 2005ean argiratutako txosten baten arabera, negozioek sortutako datuen %75 COBOLen sortutako programek prozesatzen dituzte, eta 1997ko beste txosten baten arabera, dauden 300.000 milioi kode lerroen artean %80 COBOLen sortuak daude, urtero 5000 milioi COBOL lerro berri idazten baitira. Micro Focus-ek 2022an egindako inkesta baten arabera, inkestaren erantzunen erdiek diote beren enpresetako COBOLen erabilera igoko dela hurrengo urtean. Horrekin guztiarekin, gaur egun, COBOL programazioa informatikaren munduko negozio errentagarrienetako bat da. Gainerako aplikazioetan, COBOL ez da erabiltzen, eta lengoaia modernoagoak edo moldakorragoak ordezkatzen ari dira.

## Harrera 
### Egitura falta 
1970eko hamarkadan, programazio egituratuaren paradigma hartzea gero eta gehiago ari zen hedatzen. Edsger Dijkstra informatikari ospetsuak “Nola esaten ditugu min eman dezaketen egiak?” izenburuko gutuna idatzi zion ACMko Komunikazioen editoreari. Gutun hori 1975ean argitaratu zen, eta COBOLekin eta beste zenbait hizkuntza lengoaia garaikiderekin kritikoa izan zen, eta "COBOL erabiltzeak burua sorgortzen" duela azpimarratu zuen. Howard E.Thompkins zientzialari informatikoak Dijkstaren iruzkinei erantzunez argitaratutako kritika batean, zera esan zuen: “COBOL ez egituratua lengoaia hau nola idatzi inoiz ikasi izan ez duten programatzaileek" idazten ohi dutela, arazoa nagusiki entrenamendukoa zela argudiatuz. Espageti kodearen arrazoietako bat `GO TO` adierazpena izan zen. `GO TO` gako-hitza programa batean lerro batetik bestera salto egiteko erabiltzen da. **`GO TO`**ak COBOL kodetik ezabatzeko saiakerek, ordea, programa korapilatsuak eragiten zituzten, eta, oro har, kodearen kalitatea murriztu zuten. `GO TO`en ordez, hein handi batean, `PERFORM` deklarazioak eta prozedurak egin ziren, zeinak programazio modularra sustatu baitzuten eta begizta-funtzio sarbidea eman baitzuten. Hala eta guztiz ere, gako-hitzak oso erabilera murriztua zeukan, eta horrek programen ulermena zaildu zuen.

COBOL programen ezaugarririk ezagunenak ziren monolitikoak zirela eta modularizaziorik ez zutela. COBOL kodea prozeduren bidez baino ezin zen modulatu, eta prozedura horiek desegokiak ziren sistema handietarako. Ezinezkoa zen datuetarako sarbidea mugatzea, eta horrek esan nahi du prozedura batek edozein datu-elementu atzitu eta alda zezakeela. Gainera, ez zegoen prozedura bati parametroak pasatzeko modurik. Omisio hori batzordeak egindako akats handienetako bat iruditu zitzaion Jean Sammet-i. Bazen beste konplikazio bat ere: `PERFORM THRU` gako-hitzak. Horrek esan nahi zuen programaren kontrolak jauzi egin zezakeela eta edozein prozeduratatik itzuli. Ondorioz, fluxu-kontrolak korapilatu egiten ziren, eta programatzaile bati “sarrera bakarra, irteera bakarra” araua hausteko aukera ematen zion.

Egoera hori hobetu egin zen COBOLek ezaugarri gehiago hartu ahala. COBOL-74k azpiprogramak gehitu zituen, eta programatzaileei programaren zati bakoitzak eskura zitzakeen datuak kontrolatzeko gaitasuna eman zien. COBOL-85ek habiaratutako azpiprogramak gehitu zituen, eta horrek programatzaileei azpiprogramak ezkutatzeko aukera eman zien. Datuen eta kodearen gaineko kontrol handiagoa 2002an iritsi zen. Berrikuspen honetan objektuei bideratutako programazioa, erabiltzaileak definitutako funtzioak eta erabiltzaileak definitutako datu-motak sartu ziren.

Hala ere, herentzian jaso den COBOL softwarearen zati handi batek egituratu gabeko kodea erabiltzen du, eta hori mantentzea ezinezkoa bihurtu da. Askotan, programa horiek hobekuntza hauek guztiak ailegatu baino lehen idatzi ziren, eta ez ziren eguneratu haien funtzioa betetzen zutelako. Ausartegia eta garestia izan daiteke kode sekzio soil bat aldatzea, leku ezezagunetatik eta modu ezezagunetatik erabil baitaiteke kode zati hori; noiz eta nola erabiltzen den jakitea oso zaila da.

### Sintaxi zehatua 
COBOL sintaxia askotan kritikatu izan dute bere berbengatik. Honek kodea autodokumentatua egiteko asmoa zuela diote aldekoek, programaren mantenua erraztuz. COBOL lengoaia programatzaileentzat erraz ikasteko eta erabiltzeko pentsatua zegoen, baita langile ez-teknikoentzat edo programazioari buruz ez dakien edozeinentzat ere. Irakurgarritasun nahiek ingelesaren antzeko elementu estruktural eta sintaktikoak erabiltzera eraman zituzten, hala nola izenak, aditzak, klausulak, perpausak, atalak eta zatiketak. Hala ere, 1984an, COBOL programen mantentzaileek kode "ulertezinarekin" lan egiten zuten. Denborarekin eta COBOLen berrikusketa berriekin, lengoaia gero eta matematikoagoa bihurtu da, eta hasierako ulergarritasun unibertsal hori murriztu da.

Jean Sammet-ek, lengoaiaren asmatzaileen arteko kide batek, adierazi zuenez, “programatzaile profesionalari kasu egiteko saiakera txiki bat egin da; izan ere, programazioa interes nagusi duten pertsonak oso atsekabetuta daude COBOLekin”. Hori COBOLen sintaxi zehatzari egotzi zion.

## Erreferentziak 
## Kanpo estekak