軟體工程師手冊/語言詞典/COBOL
COBOL 是一種計算機程式語言,其名稱是 "COmmon Business-Oriented Language" 的縮寫。它廣泛應用於金融服務行業,通常用於大型機上的應用程式。從 20 世紀 60 年代開始廣泛使用。COBOL 是為商業應用程式而設計的,因此它在實現時就包含了定點算術支援。這是 COBOL 的優勢之一,因為它允許在沒有舍入誤差的情況下完整、準確地計算財務值。
COBOL 是一種完整的過程式語言。
COBOL 程式分為四個部分,所有四個部分都必須以以下順序出現在每個程式中:標識;環境;資料和過程。每個部分包含若干個必選和可選節和段落。
標識部分包含有關程式的資訊,包括其名稱、作者、編譯日期等。它必須包含PROGRAM-ID段落,該段落以唯一名稱命名程式。所有其他段落都是可選的。
環境部分描述程式執行的環境。例如,它包括輸入和輸出檔案以及目標執行平臺的詳細資訊。該部分包含兩個節:配置節和輸入輸出節。
資料部分包含檔案節,它完整地描述每個輸入和輸出檔案的記錄佈局,以及工作儲存節,其中聲明瞭變數。它還包含連線節,該節描述了將在相互呼叫的程式之間傳遞的資料。
過程部分包含可執行程式指令。執行入口點是該部分中的第一條語句。
很難概述 COBOL 的通用語法,因為該語言有 500 多個保留字。此外,語法(與其他早期語言(包括 FORTRAN)一樣)不是設計為遵循正式語法;出於這個原因,COBOL 和 FORTRAN 解析器很少使用自動程式碼生成器來實現。
以下是一些示例賦值語句
MOVE A TO B.
COMPUTE GROSS-PAY = HOURS-WORKED * HOURLY-RATE.
MULTIPLY HOURLY-RATE BY HOURS-WORKED GIVING GROSS-PAY.
SET MY-INDEX UP BY 1.
SET ADDRESS OF MY-LINKAGE-SECTION-ITEM TO MY-POINTER.
READ TRANSACTION-FILE INTO TRANSACTION-RECORD-WS.
雖然許多站點仍然使用全大寫字元,但現代 COBOL 編譯器不區分大小寫。以下兩個語句完全相同
MOVE MY-NUMBER TO YOUR-NUMBER.
Move my-number to Your-Number.
對於引號括起來的文字(字串),會保留字元大小寫。
通常,指定註釋的唯一方法是在指示器區域(第 7 列)中放置一個星號。整行都是註釋。塊註釋必須在每行的第 7 列都有 *。在 2002 年的標準中,允許部分行作為註釋
MOVE A TO B. *> THIS IS A COMMENT ON THE SAME LINE AS A STATEMENT
有幾種稱為特殊暫存器的型別的變數不需要定義,但通常所有變數都必須在 COBOL 中定義,與解釋型 BASIC 不同。
COBOL 有多種資料型別,但最常見的是數值型別(帶有用於內部格式的說明符)、數值編輯資料、字母數字資料和記錄(類似於 C 中的結構體)
01 TRANSACTION-RECORD.
05 RECORD-NUMBER PICTURE S9(7) COMP-3 VALUE ZERO.
05 RECORD-DESCRIPTION PICTURE X(30) VALUE SPACES.
05 EDITED-AMOUNT PIC $$$$,$$$,$$$.99-.
05 FILLER PIC X(60) VALUE SPACES.
簡單的示例,宣告一個整數,可能看起來像這樣
77 I pic s9(4) usage is binary.
COBOL 還支援重新定義,這與 C 中的聯合 somewhat 類似。
COBOL 提供面向物件擴充套件,但絕大多數 COBOL 程式設計師沒有使用它們,也認為沒有必要。
但是,如果 COBOL 程式設計師想要建立一個類,這很容易做到。例如,這是一個HelloWorld類,帶有一個instanceMethod
IDENTIFICATION DIVISION.
CLASS-ID. HelloWorld.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
IDENTIFICATION DIVISION.
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
IDENTIFICATION DIVISION.
METHOD-ID. instanceMethod.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
DISPLAY "Hello World"
GOBACK.
END METHOD instanceMethod.
END OBJECT.
END CLASS HelloWorld.
COBOL 程式工作儲存節中包含的所有資料都是全域性的。某些資料項可以定義為外部的,對載入模組中的其他程式可見。COBOL 子程式中的資料項對於子程式是全域性的,但由於呼叫方無法看到它們,因此是區域性的。通常,資料是透過引用從 COBOL 主程式傳遞到子程式的。還存在 "按內容" 或 "按值" 的替代方法,但它們通常只用於呼叫用 C 或其他通常不使用按引用呼叫的語言編寫的子程式。
某些供應商提供擴充套件,例如執行緒本地儲存節和本地儲存節。這些擴充套件允許將資料的作用域限定為執行緒本地或程式臨時資料。
有很多這樣的語句。以下是一些示例
If my-number is numeric
continue
else
display 'data field "my-number" is not numeric'
end-if
evaluate record-type
when 'a'
perform process-record-type-a
when 'b'
perform process-record-type-b
when 'c'
continue
when 'd'
when 'e'
perform process-record-type-d-or-e
when other
perform process-invalid-record-type
end-evaluate
READ TRANSACTION-FILE INTO MY-TRAN-REC-WS
AT END
SET ALL-RECORDS-PROCESSED TO TRUE
NOT AT END
ADD +1 TO TRAN-REC-COUNT
PERFORM PROCESS-1-TRANSACTION
END-READ
也有好幾種。
Perform 6 times
add +1 to loop-count
end-perform
Perform process-1-billing-record
until all-records-processed
Perform clear-1-table-entry
varying tbl-index from +1 by +1
until tbl-index is greater than max-table-entries
Search table-entry varying tbl-index
at end
set entry-not-found to true
when table-key equal customer-id
move tbl-customer-name to print-customer-name
end-search
以下是一些示例。
DISPLAY "Hello, World!"
display 'hello, world!' with no advancing
Write billing-record from transaction-record-ws
對於鍵控順序檔案,支援START、READ、WRITE、REWRITE 和DELETE。
容器
[edit | edit source]不適用於 COBOL。
演算法
[edit | edit source]遞迴通常不受支援,但可以透過迭代模擬。
垃圾回收
[edit | edit source]透過系統 API(如 malloc)動態分配的記憶體應使用適當的“free”呼叫釋放。
使用 CLASS 的 COBOL 程式可能需要呼叫“finalize”方法來釋放物件。例如
invoke myObject "finalize" returning myObject
如果 COBOL 應用程式在虛擬機器(如 Java 虛擬機器或 Microsoft 的 CLR)下執行,則適用標準的垃圾回收規則。
否則..
COBOL 程式設計師通常不知道或不關心什麼是垃圾回收。他們很少需要分配記憶體或在之後清理記憶體。
物理結構
[edit | edit source]COBOL 原始檔可能(但不一定)包含類似於 C 中 .h 檔案的 copybook。已編譯的程式通常使用動態載入的服務例程的 COBOL 執行時庫。COBOL 原始檔本身包含四個部分:IDENTIFICATION DIVISION、ENVIRONMENT DIVISION、DATA DIVISION 和 PROCEDURE DIVISION。
提示
[edit | edit source]<請包括從其他語言切換到這種語言更容易的提示。>
網頁參考
[edit | edit source]- COBOL 常見問題解答(.DOC 格式)
- GnuCOBOL 常見問題解答和操作方法
- GnuCOBOL 手冊和指南
- COBOL 使用者組 (COBUG)(網站已關閉,2013 年的存檔)
- cob-rte
- svalgard
- swbell 頁面
- dissert
- csis.ul.ie 頁面
- infogoal 頁面
- COBOL 部落格
書籍和文章
[edit | edit source]<列出可能對您有幫助的額外書籍和文章。請包括參考資料適合什麼級別的讀者。(初學者/中級/高階)>
工具
[edit | edit source]- Cobos 專案 開源 Cobol / 主機 / CICS / DB2 整合開發環境(在 Eclipse 中)