Pemrograman · Bahasa pemrograman
Tutorial COBOL untuk pemula
Jawaban singkat
COBOL (Common Business-Oriented Language) adalah bahasa terkompilasi yang dirancang untuk pemrosesan data bisnis: record, file, laporan, dan aritmetika desimal yang eksak. Program dibagi menjadi empat division, data dijelaskan dengan klausa PIC (picture), dan kodenya terbaca seperti kalimat bahasa Inggris, misalnya ADD AMOUNT TO TOTAL. COBOL masih menjalankan sistem inti di bank, perusahaan asuransi, dan pemerintah, sebagian besar di mainframe IBM. Anda dapat mempelajarinya secara gratis dengan compiler GnuCOBOL: cobc -x hello.cob.
Apa itu COBOL dan siapa yang memakainya
COBOL dirancang pada 1959 oleh komite CODASYL, dengan pengaruh kuat dari bahasa FLOW-MATIC milik Grace Hopper yang lebih dahulu ada. COBOL distandarkan oleh ISO; standar-standar berikutnya menambahkan pemrograman terstruktur, orientasi objek, dan fitur lain, dan revisi terbarunya terbit pada 2023.
COBOL dipakai untuk batch processing dan sistem transaksi: pemrosesan rekening, penggajian, klaim asuransi, serta sistem pajak dan tunjangan. Sebagian besar kode ini berjalan di mainframe IBM Z dengan IBM Enterprise COBOL, bersama CICS untuk transaksi dan Db2 untuk data. Lowongan untuk memelihara dan memodernisasi sistem ini masih umum.
Memasang GnuCOBOL dan menjalankan Hello, world
GnuCOBOL adalah compiler gratis yang menerjemahkan COBOL ke C lalu ke program native. Tersedia sebagai paket gnucobol di banyak distribusi Linux dan di Homebrew pada macOS; pengguna Windows dapat memakai WSL atau paket siap pakai.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, world!".
STOP RUN.cobc -x hello.cob
./hello
# Hello, world!Kode ini memakai format tetap tradisional: kolom 1 sampai 6 untuk nomor urut, kolom 7 menandai komentar (*) atau baris lanjutan, Area A (kolom 8 sampai 11) berisi nama division, section, dan paragraph, dan Area B (kolom 12 sampai 72) berisi statement. GnuCOBOL juga menerima source free-format dengan cobc -x -free. Opsi -x membangun executable, bukan modul.
Empat division
| Division | Tujuan |
|---|---|
| IDENTIFICATION DIVISION | Memberi nama program (PROGRAM-ID) |
| ENVIRONMENT DIVISION | Menghubungkan program dengan dunia luar, misalnya file mana yang dipakai |
| DATA DIVISION | Mendeklarasikan semua data: record file, working storage, parameter |
| PROCEDURE DIVISION | Statement yang dieksekusi, diatur dalam paragraph |
Setiap variabel harus dideklarasikan di DATA DIVISION sebelum dipakai. WORKING-STORAGE SECTION berisi variabel program, FILE SECTION menjelaskan record file, dan LINKAGE SECTION menjelaskan parameter yang diteruskan oleh pemanggil.
Data dan klausa PIC
COBOL menjelaskan data lewat tata letaknya yang eksak. Level number menunjukkan hierarki (01 adalah record, 05 field di dalamnya), dan klausa PIC memberi formatnya: X adalah karakter apa pun, 9 adalah digit, S tanda, dan V titik desimal implisit.
| Deklarasi | Arti | Contoh nilai |
|---|---|---|
PIC X(10) | 10 karakter, diisi spasi | "Ana " |
PIC 9(3) | Angka 3 digit tanpa tanda | 030 |
PIC S9(5)V99 | Bertanda, 5 digit sebelum dan 2 sesudah titik desimal | -01234.50 |
PIC $ZZ,ZZ9.99 | Output yang diedit: tanda mata uang, nol di depan menjadi spasi | $ 1,234.50 |
PIC S9(7)V99 COMP-3 | Packed decimal, umum di mainframe | disimpan dalam 5 byte |
88 IS-DONE VALUE "Y" | Condition name: pengujian Boolean pada field induknya | IF IS-DONE |
IDENTIFICATION DIVISION.
PROGRAM-ID. DATA-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME PIC X(10) VALUE "Ana".
01 WS-AGE PIC 9(3) VALUE 30.
01 WS-PRICE PIC S9(5)V99 VALUE 1234.50.
01 WS-PRICE-OUT PIC $ZZ,ZZ9.99.
01 WS-CUSTOMER.
05 WS-FIRST PIC X(10).
05 WS-LAST PIC X(15).
PROCEDURE DIVISION.
MOVE WS-PRICE TO WS-PRICE-OUT
DISPLAY WS-NAME "is " WS-AGE
DISPLAY "Price: " WS-PRICE-OUT
STOP RUN.
*> Ana is 030
*> Price: $ 1,234.50Angka disimpan dalam desimal, sehingga 0.10 + 0.20 tepat 0.30, salah satu alasan COBOL cocok untuk uang. WS-CUSTOMER adalah group item: dapat dipindahkan sekaligus atau field demi field.
Alur kontrol: IF, EVALUATE, dan PERFORM
IDENTIFICATION DIVISION.
PROGRAM-ID. CONTROL-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-I PIC 99.
01 WS-TOTAL PIC 9(4) VALUE 0.
01 WS-SCORE PIC 999 VALUE 85.
PROCEDURE DIVISION.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10
ADD WS-I TO WS-TOTAL
END-PERFORM
DISPLAY "Total: " WS-TOTAL
EVALUATE TRUE
WHEN WS-SCORE >= 90
DISPLAY "A"
WHEN WS-SCORE >= 80
DISPLAY "B"
WHEN OTHER
DISPLAY "C"
END-EVALUATE
IF WS-TOTAL > 50
DISPLAY "big"
ELSE
DISPLAY "small"
END-IF
STOP RUN.
*> Total: 0055
*> B
*> bigPERFORM VARYING adalah perulangan berhitung COBOL dan PERFORM UNTIL condition adalah perulangan while-nya. EVALUATE adalah statement switch. Scope terminator seperti END-IF dan END-PERFORM menutup setiap blok; titik mengakhiri seluruh kalimat.
Paragraph, aritmetika, dan tabel
COBOL tidak punya fungsi dalam arti biasa. Anda menata logika dalam paragraph bernama dan menjalankannya dengan PERFORM; unit yang lebih besar menjadi program terpisah yang dipanggil dengan CALL "PROG" USING .... Aritmetika memakai verb (ADD, SUBTRACT, MULTIPLY, DIVIDE) atau COMPUTE dengan rumus. Array disebut tabel dan dideklarasikan dengan OCCURS; indeksnya dimulai dari 1.
IDENTIFICATION DIVISION.
PROGRAM-ID. PARA-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PRICES.
05 WS-PRICE PIC 9(3)V99 OCCURS 3 TIMES.
01 WS-I PIC 9.
01 WS-SUM PIC 9(4)V99 VALUE 0.
01 WS-SUM-OUT PIC Z,ZZ9.99.
PROCEDURE DIVISION.
MAIN-PARA.
MOVE 10.50 TO WS-PRICE(1)
MOVE 4.25 TO WS-PRICE(2)
MOVE 7.00 TO WS-PRICE(3)
PERFORM ADD-PRICE VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
COMPUTE WS-SUM = WS-SUM * 1.1
MOVE WS-SUM TO WS-SUM-OUT
DISPLAY "With 10% tax: " WS-SUM-OUT
STOP RUN.
ADD-PRICE.
ADD WS-PRICE(WS-I) TO WS-SUM.
*> With 10% tax: 23.92Jumlahnya 21.75; dikalikan 1.1 menjadi 23.925, dan COBOL memotong ke dua desimal yang dideklarasikan (23.92) kecuali Anda menulis COMPUTE ... ROUNDED.
Penanganan error
COBOL tidak punya exception dalam kode sehari-hari. Sebagai gantinya, statement punya frasa bersyarat: ON SIZE ERROR untuk overflow aritmetika atau pembagian dengan nol, AT END untuk akhir file, INVALID KEY untuk file berindeks, dan field FILE STATUS yang menerima kode dua karakter setelah setiap operasi file ("00" berarti sukses).
DIVIDE WS-A BY WS-B GIVING WS-C
ON SIZE ERROR
DISPLAY "Division failed"
NOT ON SIZE ERROR
DISPLAY "Result: " WS-C
END-DIVIDEProgram lengkap kecil: total file penjualan
Membaca record bertata letak tetap dari file adalah pekerjaan khas COBOL. Program ini membaca sales.txt, tempat setiap baris berisi nama item 10 karakter diikuti jumlah 7 digit dengan dua desimal implisit.
apples 0001250
pears 0000899
plums 0002000 IDENTIFICATION DIVISION.
PROGRAM-ID. SALES-TOTAL.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SALES-FILE ASSIGN TO "sales.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS WS-FS.
DATA DIVISION.
FILE SECTION.
FD SALES-FILE.
01 SALES-REC.
05 SR-ITEM PIC X(10).
05 SR-AMOUNT PIC 9(5)V99.
WORKING-STORAGE SECTION.
01 WS-FS PIC XX.
01 WS-EOF PIC X VALUE "N".
88 NO-MORE-RECORDS VALUE "Y".
01 WS-TOTAL PIC 9(7)V99 VALUE 0.
01 WS-TOTAL-OUT PIC Z,ZZZ,ZZ9.99.
PROCEDURE DIVISION.
OPEN INPUT SALES-FILE
IF WS-FS NOT = "00"
DISPLAY "Cannot open file, status " WS-FS
STOP RUN
END-IF
PERFORM UNTIL NO-MORE-RECORDS
READ SALES-FILE
AT END SET NO-MORE-RECORDS TO TRUE
NOT AT END ADD SR-AMOUNT TO WS-TOTAL
END-READ
END-PERFORM
CLOSE SALES-FILE
MOVE WS-TOTAL TO WS-TOTAL-OUT
DISPLAY "Total sales: " WS-TOTAL-OUT
STOP RUN.Saat dijalankan, program mencetak Total sales: diikuti 41.49 rata kanan dalam field hasil edit selebar 12 karakter. LINE SEQUENTIAL berarti file teks dengan satu record per baris; didukung oleh GnuCOBOL dan compiler PC lain, sedangkan program mainframe biasanya membaca dataset berpanjang tetap yang didefinisikan di JCL.
Langkah selanjutnya
- Halaman proyek GnuCOBOL dan Programmer's Guide-nya untuk referensi bahasa lengkap.
- Dokumentasi Enterprise COBOL for z/OS dari IBM untuk COBOL mainframe, CICS, dan penggunaan Db2.
- Berlatihlah membaca dan menulis file, mengurutkan dengan verb
SORT, dan membuat laporan terformat. - Pelajari tool mainframe di sekitarnya (JCL, TSO/ISPF) jika Anda ingin bekerja pada sistem produksi.
FAQ
Apakah COBOL masih dipakai?
Ya. Banyak bank, perusahaan asuransi, dan lembaga pemerintah masih menjalankan program COBOL untuk batch dan pemrosesan transaksi inti, sehingga permintaan akan developer yang dapat memelihara dan memodernisasinya terus ada.
Apakah COBOL sulit dipelajari?
Sintaksnya bertele-tele tetapi sederhana, dan sebagian besar pemula dapat menulis program yang berfungsi dengan cepat. Bagian yang lebih sulit adalah lingkungan mainframe di sekitarnya: JCL, dataset, CICS, dan Db2.
Bisakah saya belajar COBOL tanpa mainframe?
Bisa. GnuCOBOL berjalan di Linux, macOS, dan Windows serta mendukung COBOL standar, jadi Anda dapat belajar bahasanya di komputer biasa sebelum pindah ke mainframe.
Mengapa COBOL memakai bilangan desimal?
Data bisnis seperti uang harus eksak. COBOL menyimpan angka sebagai digit desimal dengan jumlah tempat desimal tetap, yang menghindari galat pembulatan pada floating point biner.