COBOL - Chương trình con
Chương trình con Cobol là một chương trình có thể được biên dịch độc lập nhưng không thể thực thi một cách độc lập. Có hai loại chương trình con:internal subroutines giống Perform tuyên bố và external các chương trình con như CALL verb.
Gọi động từ
Động từ gọi được sử dụng để chuyển điều khiển từ chương trình này sang chương trình khác. Chương trình có chứa động từ CALL làCalling Program và chương trình được gọi là Called Program. Việc thực thi chương trình đang gọi sẽ tạm dừng cho đến khi chương trình được gọi kết thúc quá trình thực thi. Lệnh Exit Program được sử dụng trong chương trình Đã gọi để chuyển điều khiển trở lại.
Được gọi là Ràng buộc Chương trình
Sau đây là các yêu cầu chương trình được gọi:
Linkage sectionphải được định nghĩa trong chương trình được gọi. Nó bao gồm các phần tử dữ liệu được truyền vào chương trình. Các mục dữ liệu không được có mệnh đề Giá trị. Mệnh đề PIC phải tương thích với các biến được truyền qua chương trình gọi.
Procedure division using có danh sách các biến được truyền từ chương trình gọi và thứ tự phải giống như đã đề cập trong động từ Gọi.
Exit programcâu lệnh được sử dụng trong chương trình được gọi để chuyển điều khiển trở lại. Nó phải là câu lệnh cuối cùng trong chương trình được gọi.
Các tham số có thể được chuyển giữa các chương trình theo hai cách:
- Bằng cách tham khảo
- Theo nội dung
Gọi bằng Tham chiếu
Nếu giá trị của các biến trong chương trình được gọi được sửa đổi, thì giá trị mới của chúng sẽ phản ánh trong chương trình đang gọi. NếuBY mệnh đề không được chỉ định, khi đó các biến luôn được chuyển bằng tham chiếu.
Cú pháp
Sau đây là cú pháp gọi chương trình con bằng tham chiếu:
CALL sub-prog-name USING variable-1, variable-2.
Example
Ví dụ sau là chương trình gọi MAIN và UTIL là chương trình được gọi -
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.
PROCEDURE DIVISION.
CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
DISPLAY 'Student Id : ' WS-STUDENT-ID
DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.
Chương trình đã gọi
IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-STUDENT-ID PIC 9(4).
01 LS-STUDENT-NAME PIC A(15).
PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
DISPLAY 'In Called Program'.
MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
In Called Program
Student Id : 1111
Student Name : Tim
Gọi theo nội dung
Nếu giá trị của các biến trong chương trình được gọi được sửa đổi, thì giá trị mới của chúng sẽ không phản ánh trong chương trình đang gọi.
Cú pháp
Sau đây là cú pháp gọi chương trình con theo nội dung:
CALL sub-prog-name USING
BY CONTENT variable-1, BY CONTENT variable-2.
Example
Ví dụ sau là chương trình gọi MAIN và UTIL là chương trình được gọi -
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.
PROCEDURE DIVISION.
CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
DISPLAY 'Student Id : ' WS-STUDENT-ID
DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.
Chương trình đã gọi
IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-STUDENT-ID PIC 9(4).
01 LS-STUDENT-NAME PIC A(15).
PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
DISPLAY 'In Called Program'.
MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.
JCL để thực hiện chương trình COBOL ở trên -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
In Called Program
Student Id : 1000
Student Name : Tim
Các loại cuộc gọi
Có hai loại cuộc gọi -
Static Callxảy ra khi một chương trình được biên dịch với tùy chọn trình biên dịch NODYNAM. Một chương trình được gọi là tĩnh được tải vào bộ nhớ tại thời điểm biên dịch.
Dynamic Callxảy ra khi một chương trình được biên dịch với tùy chọn trình biên dịch DYNAM và NODLL. Một chương trình động được gọi là được tải vào bộ nhớ trong thời gian chạy.