Vòng lặp và PERFORM trong COBOL – Hiểu rõ loop pattern trong batch program
5:00 read
Tại sao phải hiểu PERFORM và vòng lặp trong COBOL?
Ở các bài trước bạn đã có:
- Bài 002: hiểu DATA DIVISION, PIC, level number, group item
- Bài 004: nắm toán tử & biểu thức (
MOVE,ADD,COMPUTE, ...) - Bài 005: làm chủ cấu trúc điều kiện (
IF,EVALUATE)
Để đọc được một batch program thực tế như RZZBSQLN1.PCO, bạn còn thiếu một mảnh ghép rất quan trọng:
Vòng lặp và cách COBOL điều khiển flow bằng
PERFORM.
Trong Java/C#/Python, bạn quen với for, while, do-while. Trong COBOL, hầu hết control flow đều xoay quanh:
PERFORM paragraph– gọi một đoạn code như gọi hàmPERFORM paragraph THRU paragraph-EXIT– gọi một block nhiều paragraph liên tiếpPERFORM ... UNTIL ...– vòng lặp kiểudo { ... } while (...)PERFORM VARYING ... FROM ... BY ... UNTIL ...– gần giốngfortăng biến đếm
Bài này sẽ giúp bạn:
- Đọc hiểu main loop của một batch COBOL
- Hiểu được kiểu code như:
PERFORM MAIN-RTN UNTIL INP1_END = 1. - Mapping
PERFORM VARYINGsangfortrong Java/Python - Áp dụng thực tế với ví dụ và bài tập
PERFORM paragraph – Gọi một đoạn code như hàm
Cú pháp cơ bản
PERFORM paragraph-name.
Trong đó paragraph-name là một nhãn trong PROCEDURE DIVISION:
PROCEDURE DIVISION.
MAIN-RTN.
PERFORM INIT-RTN
PERFORM PROCESS-RTN
PERFORM FINISH-RTN
STOP RUN.
INIT-RTN.
DISPLAY "INIT".
EXIT.
PROCESS-RTN.
DISPLAY "PROCESS".
EXIT.
FINISH-RTN.
DISPLAY "FINISH".
EXIT.
Mapping sang Java:
void main() {
initRtn();
processRtn();
finishRtn();
}
Trong các chương trình enterprise như RZZBSQLN1, cấu trúc rất giống:
MAIN-RTNđóng vai trò main logic- Các
*-RTNkhác là subroutine đượcPERFORM
Quy tắc quan trọng
PERFORM paragraph.chạy từ đầu paragraph cho tới- Gặp
EXIT.của paragraph đó, hoặc - Gặp
STOP RUN., hoặc - Rơi vào paragraph khác mà không có
EXITrõ ràng (pattern legacy, khó đọc – sẽ nói thêm ở bài kiến trúc).
- Gặp
Best practice hiện đại: mỗi paragraph nên kết thúc bằng EXIT. hoặc GOBACK. để flow dễ follow.
Yêu cầu đăng nhập
Vui lòng đăng nhập để truy cập nội dung này
Additional Resources
Course Guide
Comprehensive PDF guide with examples
GitHub Repository
Example code for all lessons
Discussion
Have a question about this lesson? Post it here and get answers from instructors and peers.
