COBOL

,,

developers = ，美國國家標準協會，國際標準化組織

typing = 弱型別，靜態

implementations = , }},

dialects = COBOL/2, DEC COBOL-10, DEC PDP-11 COBOL, DEC PDP-11 COBOL-85, DEC VAX COBOL, DOSVS COBOL, Envyr ICOBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL SAA, IBM COBOL/400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL (VME), Micro Focus ACUCOBOL-GT, Micro Focus COBOL-IT, Micro Focus RM/COBOL, Micro Focus Visual COBOL, Microsoft COBOL, Raincode COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, X/Open COBOL, Veryant isCOBOL, Wang VS COBOL,

influenced by = 起初：、、、

COBOL 2002

}}：C++、Eiffel、Smalltalk

influenced = 、、PL/I、

file_ext = .cbl, .cob, .cpy

wikibooks = COBOL

}}

COBOL，其名稱來自於英語 Common Business Oriented Language 的縮寫，可譯為通用商業語言或面向常規業務型語言 / 常規商業資訊處理語言，它屬於編譯語言，是最早的高階程式語言之一，也是最早實施標準化的計算機語言之一。COBOL 主要應用於商業資料處理領域，此間大量的資料通常以檔案的形式儲存在磁碟上，它提供強大的檔案處理功能，對各種型別的資料進行收集、儲存、傳送、分類、排序、計算及列印報表、輸出影像。

歷史

1959 年 5 月，美國國防部委託葛麗絲・霍普博士領導一個委員會，制定了 COBOL 語言的標準。和其他 5 位程式設計師，在紐約曼哈頓的封閉兩週，開發完成了 COBOL 的大部分設計。COBOL 最早是以葛麗絲・霍普開發的語言為範本。

COBOL 於 1961 年由公佈。正式發布於 1960 年 4 月，稱為 COBOL－60，現在最新的版本是 COBOL－2023。1963 年，美國國家標準學會進行了標準化，但是 ANSI 標準很少被遵循，故而 COBOL 程式只是部分可移植的。

遺留

經過多年來的不斷修改、豐富完善和標準化，COBOL 已發展為多種版本的龐大語言。COBOL 在財會工作、統計報表、計劃編制、情報檢索、人事管理等資料管理及商業資料處理領域，都曾有著廣泛的應用。COBOL 多年來被視為過時的語言，但是目前仍有使用 COBOL 的金融業核心系統在執行中，除了舊有系統太龐大修改不易外，COBOL 平臺的穩定性也是它生命一直超過預期延續的重要原因。

在 2019 新型冠狀病毒疫情影響下，美國政府因為需處理大量失業救助，使得 COBOL 編寫的老舊系統頻繁出現故障，需要同樣上年紀、甚至已退休的老年 COBOL 程式設計師來協助維護，所以 COBOL 的創始團隊在網上公開教程和學習資源，讓年輕程式設計師學習 COBOL 來協助這些程式設計師維護系統，同時也緊急招募 COBOL 程式設計師來協助維護。

特點

COBOL 是一種面向資料處理的、面向檔案的、面向過程的高階程式語言，是一種功能很強而又極為冗長的語言。COBOL 語法與英文很接近，即使是不懂程式設計的人也能看懂程式碼。僅提供了加、減、乘、除及乘方這五種簡單的算術運算，因而不適於進行科學計算。COBOL 適合於具有迴圈處理週期的環境（例如列印工資支票）以及資料操縱量相當大的環境。

程式結構

COBOL 程式由 4 部（DIVISION）組成：IDENTIFICATION DIVISION.（標識部）、ENVIRONMENT DIVISION.（環境部）、DATA DIVISION.（資料部）、

PROCEDURE DIVISION.（過程部），而每個部又由若干節（SECTION）組成。

4.1 IDENTIFICATION DIVISION.

「PROGRAM-ID」（程式識別 ID）、「AUTHOR」（作者名）、「DATE-WRITTEN」（編寫日期），這些並不直接影響程式的執行，而是程式的註釋

資訊。程式註釋可以採用任何語言書寫，COBOL 編譯器可以接受。

4.2 ENVIRONMENT DIVISION.

用於記載程式可以被執行的計算機環境。“ENVIRONMENT DIVISION.” 部包括 “CONFIGURATION SECTION” 環境節和 “INPUT-OUTPUT SECTION” 輸入輸出節。

4.3 DATA DIVISION.

用於定義和宣告程式所要使用的變數及其他資料。程式要使用的全部變數和資料必須在這裡定義。“DATA DIVISION.” 部主要包含 “FILE SECTION.” 和 “WORKING-STORAGE SECTION.” 節。

如果程式要透過引數接收資料，那麼使用 “LINKAGE SECTION” 來宣告。

4.3.1 COBOL 的資料種類

COBOL 程式的資料，主要有以下 3 種：

變數（Variables）
常量（Literals）
表意常量（FigurativeConstants）：使用有特定意思的多個詞組合成一個常量的代名詞。好處是便於編碼人員識別。比如：HIGH-VALUES、LOW-VALUES 等可以表達一定意思的名稱作為常量代名詞。

4.3.2 COBOL 變數型別

COBOL 的基本變數型別，有以下三種：

數值型（Numeric）
英文字元型（AlphaNumeric）
英文字串型（Alphabetic）

4.4 PROCEDURE DIVISION

用於容納程式的實際處理程式碼。需要傳入引數時，採用 “PROCEDURE DIVISION USING 引數名，引數名...” 的方式。

因為前 3 個 DIVISION 都是註釋，卻又必須，只到第 4 個 DIVISION「PROCEDURE DIVISION」才真正涉及程式程式碼，這樣的繁瑣規定使得 COBOL 被批評為太過冗長。但是，基於這樣的 4 個 DIVISION 的明確記述等的嚴格形式，COBOL 也被公認是可讀性強的語言。另外，COBOL 的保留字數量龐大，字數過長的保留字太多是 COBOL 的特徵之一。

Hello world 例子程式碼

Hello world 用 COBOL 寫為：

IDENTIFICATION DIVISION.

PROGRAM-ID. hello-world.

PROCEDURE DIVISION.

DISPLAY "Hello, world!"

.

現在著名的 Hello, World! 程式例子，於 1978 年在《C 程式語言》書中最初問世的那個時代，在主機上類似的 COBOL 程式可以透過來提交，並很有可能使用打孔卡閱讀器和 80 列打孔卡。下面列出的具有空 DATA DIVISION 的程式碼，曾使用 GNU/Linux 和執行 3.8J 的 Hercules 模擬器測試過。這段寫於 2015 年的 JCL，是從 Hercules 教程和 Jay Moseley 保管的樣例派生而來。為了保持那個時代的 COBOL 程式，HELLO, WORLD 用全部大寫字母顯示。

//COBUCLG JOB (001),'COBOL BASE TEST', 00010000

// CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1) 00020000

//BASETEST EXEC COBUCLG 00030000

//COB.SYSIN DD * 00040000

00000* VALIDATION OF BASE COBOL INSTALL 00050000

01000 IDENTIFICATION DIVISION. 00060000

01100 PROGRAM-ID. 'HELLO'. 00070000

02000 ENVIRONMENT DIVISION. 00080000

02100 CONFIGURATION SECTION. 00090000

02110 SOURCE-COMPUTER. GNULINUX. 00100000

02120 OBJECT-COMPUTER. HERCULES. 00110000

02200 SPECIAL-NAMES. 00120000

02210 CONSOLE IS CONSL. 00130000

03000 DATA DIVISION. 00140000

04000 PROCEDURE DIVISION. 00150000

04100 00-MAIN. 00160000

04110 DISPLAY 'HELLO, WORLD' UPON CONSL. 00170000

04900 STOP RUN. 00180000

//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR 00190000

// DD DSNAME=SYS1.LINKLIB,DISP=SHR 00200000

//GO.SYSPRINT DD SYSOUT=A 00210000

// 00220000

在提交了這段 JCL 之後，MVS 控制檯顯示：

19.52.48 JOB 3 $HASP100 COBUCLG ON READER1 COBOL BASE TEST

19.52.48 JOB 3 IEF677I WARNING MESSAGE (S) FOR JOB COBUCLG ISSUED

19.52.48 JOB 3 $HASP373 COBUCLG STARTED - INIT 1 - CLASS A - SYS BSP1

19.52.48 JOB 3 IEC130I SYSPUNCH DD STATEMENT MISSING

19.52.48 JOB 3 IEC130I SYSLIB DD STATEMENT MISSING

19.52.48 JOB 3 IEC130I SYSPUNCH DD STATEMENT MISSING

19.52.48 JOB 3 IEFACTRT - Stepname Procstep Program Retcode

19.52.48 JOB 3 COBUCLG BASETEST COB IKFCBL00 RC= 0000

19.52.48 JOB 3 COBUCLG BASETEST LKED IEWL RC= 0000

19.52.48 JOB 3 +HELLO, WORLD

19.52.48 JOB 3 COBUCLG BASETEST GO PGM=*.DD RC= 0000

19.52.48 JOB 3 $HASP395 COBUCLG ENDED

為了效果對上述列出的第 10 行加以高亮，這個高亮不是實際的控制檯輸出。

有關的編譯器列表生成了超過四頁的技術細節和作業執行資訊，針對這 14 行 COBOL 的單一一行輸出。