COBOL

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

**歷史**
1959年5月，美國國防部委託葛麗絲·霍普博士領導一個委員會，制定了COBOL語言的標準。Q14232和其他5位程序員，在紐約曼哈頓的Q2414200封閉兩週，開發完成了COBOL的大部分設計。COBOL最早是以葛麗絲·霍普開發的語言為範本。
COBOL於1961年由Q1023961公佈。正式發布於1960年4月，稱為COBOL－60，現在最新的版本是COBOL－2023。1963年，美國國家標準學會進行了標準化，但是ANSI標準很少被遵循，故而COBOL程序只是部分可移植的。

**遺留**
經過多年來的不斷修改、豐富完善和標準化，COBOL已發展為多種版本的龐大語言。COBOL在財會工作、統計報表、計劃編制、情報檢索、人事管理等數據管理及商業數據處理領域，都曾有著廣泛的應用。COBOL多年來被視為過時的語言，但是目前仍有使用COBOL的金融業核心系統在運行中，除了舊有系統太龐大修改不易外，COBOL平臺的穩定性也是它生命一直超過預期延續的重要原因。
在2019新型冠狀病毒疫情影響下，美國政府因為需處理大量失業救助，使得COBOL編寫的老舊系統頻繁出現故障，需要同樣上年紀、甚至已退休的老年COBOL程序員來協助維護，所以COBOL的創始團隊在網上公開教程和學習資源，讓年輕程序員學習COBOL來協助這些程序員維護系統，同時也緊急招募COBOL程序員來協助維護。

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

**程序結構**
COBOL程序由4部（DIVISION）組成：IDENTIFICATION DIVISION.（標識部）、ENVIRONMENT DIVISION.（環境部）、DATA DIVISION.（數據部）、
PROCEDURE DIVISION.（過程部），而每個部又由若干節（SECTION）組成。

**IDENTIFICATION DIVISION.**
「PROGRAM-ID」（程序識別ID）、「AUTHOR」（作者名）、「DATE-WRITTEN」（編寫日期），這些並不直接影響程序的執行，而是程序的註釋
信息。程序註釋可以採用任何語言書寫，COBOL編譯器可以接受。

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

**DATA DIVISION.**
用於定義和聲明程序所要使用的變量及其他數據。程序要使用的全部變量和數據必須在這裡定義。“DATA DIVISION.”部主要包含“FILE SECTION.”和“WORKING-STORAGE SECTION.”節。
如果程序要通過參數接收數據，那麼使用“LINKAGE SECTION”來聲明。

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

**COBOL變量類型**
COBOL的基本變量類型，有以下三種：- 數值型（Numeric）- 英文字符型（AlphaNumeric）- 英文字符串型（Alphabetic）

**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程序可以通過JCL來提交，並很有可能使用打孔卡閱讀器和80列打孔卡。下面列出的具有空DATA DIVISION的代碼，曾使用GNU/Linux和運行MVS 3.8J的System/370 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的單一一行輸出。

**註釋**

**參考文獻 ==