cv.cm

Pemrograman · Bahasa pemrograman

Tutorial COBOL untuk pemula

6 menit baca

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

DivisionTujuan
IDENTIFICATION DIVISIONMemberi nama program (PROGRAM-ID)
ENVIRONMENT DIVISIONMenghubungkan program dengan dunia luar, misalnya file mana yang dipakai
DATA DIVISIONMendeklarasikan semua data: record file, working storage, parameter
PROCEDURE DIVISIONStatement 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.

DeklarasiArtiContoh nilai
PIC X(10)10 karakter, diisi spasi"Ana "
PIC 9(3)Angka 3 digit tanpa tanda030
PIC S9(5)V99Bertanda, 5 digit sebelum dan 2 sesudah titik desimal-01234.50
PIC $ZZ,ZZ9.99Output yang diedit: tanda mata uang, nol di depan menjadi spasi$ 1,234.50
PIC S9(7)V99 COMP-3Packed decimal, umum di mainframedisimpan dalam 5 byte
88 IS-DONE VALUE "Y"Condition name: pengujian Boolean pada field induknyaIF 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.50

Angka 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
      *> big

PERFORM 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.92

Jumlahnya 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-DIVIDE

Program 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.

Semua tutorial pemrograman