跳轉到內容

軟體工程師手冊/語言字典/COBOL

來自華夏公益教科書

COBOL是一種計算機程式語言,其名稱是“COmmon Business-Oriented Language”的首字母縮寫。它廣泛應用於金融服務行業,通常用於基於大型機的應用程式。自1960年代以來,它被廣泛使用。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語言中的聯合體有些類似。

方法宣告/實現

[編輯 | 編輯原始碼]

面向物件的擴充套件適用於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

對於鍵排序檔案,支援STARTREADWRITEREWRITEDELETE

不適用於COBOL。

演算法

[編輯 | 編輯原始碼]

遞迴通常不支援,但可以透過迭代模擬。

垃圾回收

[編輯 | 編輯原始碼]

透過系統 API(如 malloc)動態分配的記憶體應使用相應的“free”呼叫釋放。

使用 CLASS 的 COBOL 程式可能需要呼叫“finalize”方法來釋放物件。例如

 invoke myObject "finalize" returning myObject

如果 COBOL 應用程式在虛擬機器(如 Java 虛擬機器或微軟的 CLR)下執行,則標準的垃圾回收規則適用。

否則..

COBOL 程式設計師通常不知道或不在乎什麼是垃圾回收。他們很少需要分配記憶體或在之後清理它。

物理結構

[編輯 | 編輯原始碼]

COBOL 原始檔可能包含(但不一定)copybook,類似於 C 語言中的 .h 檔案。編譯後的程式通常使用動態載入的 COBOL 執行時庫服務例程。COBOL 原始檔本身包含四個部分:IDENTIFICATION DIVISIONENVIRONMENT DIVISIONDATA DIVISIONPROCEDURE DIVISION

<請包含從其他語言切換到此語言的簡便技巧。>

網路參考資料

[編輯 | 編輯原始碼]

書籍和文章

[編輯 | 編輯原始碼]

<列出可能有所幫助的其他書籍和文章。請包括參考資料適合什麼級別的讀者。(初級/中級/高階)>

返回標題頁面

  • Cobos 專案 開源 Cobol / 大型機 / CICS / DB2 整合開發環境(在 Eclipse 中)
華夏公益教科書