Empat Divisi

IDENTIFICATION, ENVIRONMENT, DATA, dan PROCEDURE sebagai kerangka kanonik setiap program.

Daftar isi

Kode sumber COBOL mengikuti kerangka empat divisi yang urutannya tetap, yaitu IDENTIFICATION, ENVIRONMENT, DATA, dan PROCEDURE. Topik ini membahas tugas setiap divisi, bagian yang wajib dan opsional di dalamnya, serta dua program yang dapat langsung dikompilasi, yaitu program minimal dua divisi dan program lengkap empat divisi. Setelah topik ini dibaca, kerangka berkas .cbl apa pun dapat disusun tanpa menebak divisi yang harus ditulis lebih dahulu.

Kerangka empat divisi#

COBOL menata kode sumber menjadi empat divisi (division), yaitu blok besar dengan judul baku yang masing-masing menampung satu kelompok deklarasi atau pernyataan. Judul divisi selalu ditulis pada Area A (kolom 8-11 pada format tetap) dan diakhiri titik, misalnya IDENTIFICATION DIVISION. Dua divisi pertama mendeskripsikan program dan lingkungan eksekusinya, divisi ketiga mendeskripsikan data yang diolah, dan divisi terakhir memuat logika yang benar-benar dieksekusi. Karena kompilator membaca divisi demi divisi dari atas ke bawah, data yang dipakai pada divisi PROCEDURE harus dideklarasikan lebih dahulu pada divisi DATA.

Tabel berikut merangkum sifat dan isi keempat divisi.

DivisiSifatIsi utama
IDENTIFICATIONwajibidentitas program melalui paragraf PROGRAM-ID
ENVIRONMENTopsionalkonfigurasi komputer dan pemetaan berkas eksternal
DATAopsionaldeskripsi record berkas dan variabel kerja
PROCEDUREwajibpernyataan yang dieksekusi dari atas ke bawah

Kewajiban hanya melekat pada dua divisi, sedangkan ENVIRONMENT dan DATA boleh tidak ditulis. Susunan inilah yang memungkinkan program COBOL paling ringkas, dan bentuk tersebut dibuktikan dengan program nyata menjelang akhir topik.

IDENTIFICATION DIVISION#

IDENTIFICATION DIVISION selalu menjadi pembuka setiap program, dan satu-satunya paragraf yang wajib ada di dalamnya adalah PROGRAM-ID. Paragraf ini memberi nama program, misalnya PROGRAM-ID. DUA-DIVISI. Nama tersebut menjadi identitas program pada daftar simbol kompilator dan dipakai ketika program lain memanggilnya melalui CALL. Penulisannya mengikuti aturan kata yang ditentukan pengguna (user-defined word) COBOL, yaitu kombinasi huruf, angka, dan tanda hubung yang tidak dimulai atau diakhiri tanda hubung.

Paragraf lain seperti AUTHOR, DATE-WRITTEN, DATE-COMPILED, dan SECURITY bersifat opsional serta berfungsi dokumentatif, karena kompilator tidak menegakkan isinya. Pada kode modern, paragraf opsional tersebut lazimnya ditulis seperlunya saja, sehingga bagian pembuka program tetap pendek. Seluruh paragraf pada divisi ini berakhir dengan titik, dan judul divisi berikutnya menutup divisi ini secara otomatis.

ENVIRONMENT DIVISION#

ENVIRONMENT DIVISION bersifat opsional dan menjadi satu-satunya tempat program menyebut karakteristik mesin serta pemetaan berkas. Divisi ini terdiri atas dua section. CONFIGURATION SECTION menampung paragraf SOURCE-COMPUTER dan OBJECT-COMPUTER yang menamai komputer penyusun dan komputer pelaksana, serta SPECIAL-NAMES untuk penyesuaian seperti penggantian tanda desimal. INPUT-OUTPUT SECTION memuat paragraf FILE-CONTROL yang memetakan setiap berkas logis ke berkas fisik melalui klausa SELECT dan ASSIGN TO, misalnya SELECT ARSIP-NOTA ASSIGN TO "nota.dat".

Kumpulan ketergantungan mesin pada satu divisi inilah yang membuat program COBOL mudah dipindahkan. Apabila program berpindah mesin, suntingan cukup dilakukan pada divisi ENVIRONMENT, sedangkan divisi DATA dan PROCEDURE tetap utuh. Program kecil yang tidak memakai berkas boleh melewatkan seluruh divisi ini. Kedua program contoh pada topik ini menunjukkan kedua kemungkinan tersebut, yaitu dengan dan tanpa divisi ENVIRONMENT.

DATA DIVISION#

DATA DIVISION mendeskripsikan seluruh data yang dipakai program, dan dua section yang paling sering muncul adalah FILE SECTION serta WORKING-STORAGE SECTION. FILE SECTION menampung deskripsi record untuk setiap berkas yang sudah dipetakan di FILE-CONTROL, dimulai dari entri FD yang menamai berkas logis lalu entri level 01 yang mendeskripsikan record-nya. WORKING-STORAGE SECTION menampung variabel kerja yang hidup selama program berjalan, dan klausa VALUE menetapkan nilai awalnya. Ukuran dan bentuk setiap field ditentukan oleh klausa PIC, sedangkan huruf V menandai posisi desimal tersirat yang tidak memakan ruang simpan.

Topik ini hanya memakai bentuk paling sederhana dari PIC, yaitu X untuk karakter dan 9 untuk digit. Entri level 01 dan 77 ditulis pada Area A, sedangkan sublevel di bawahnya ditulis pada Area B (kolom 12-72) dengan indentasi agar hierarkinya terbaca. Selain dua section tersebut, divisi DATA juga menyediakan LINKAGE SECTION untuk data yang diterima dari program pemanggil dan LOCAL-STORAGE SECTION untuk data yang hidup per pemanggilan.

PROCEDURE DIVISION#

PROCEDURE DIVISION memuat pernyataan (statement) yang dieksekusi, dan satu atau beberapa pernyataan membentuk kalimat (sentence) yang diakhiri dengan titik. Setiap pernyataan dibangun dari verb baku seperti MOVE, COMPUTE, DISPLAY, IF, dan STOP RUN. Verb DISPLAY mengirimkan operannya ke aliran keluaran standar beserta baris baru, sedangkan STOP RUN mengembalikan kendali ke sistem operasi dan menandai akhir eksekusi. Titik yang menutup kalimat bersifat menentukan, sehingga satu titik yang salah tempat dapat memotong rangkaian pernyataan tanpa terlihat.

Pada program sederhana, seluruh logika ditulis berurutan dari atas ke bawah tanpa paragraf, sebagaimana kedua contoh topik ini. Program yang lebih besar membagi logika menjadi paragraf bernama yang dipanggil dengan PERFORM, dan pembagian itu tetap berada di dalam divisi yang sama. Urutan eksekusi mengikuti urutan teks kecuali dinyatakan lain oleh verb pencabang.

Program minimal dua divisi#

Karena ENVIRONMENT dan DATA bersifat opsional, program paling ringkas hanya memuat IDENTIFICATION dan PROCEDURE. Berkas dua-divisi.cbl berikut sah menurut standar dan dapat dikompilasi apa adanya.

cobol dua-divisi.cbl
       IDENTIFICATION DIVISION.
       PROGRAM-ID. DUA-DIVISI.
       PROCEDURE DIVISION.
           DISPLAY "Divisi yang wajib ada: IDENTIFICATION".
           DISPLAY "Divisi yang berisi logika: PROCEDURE".
           DISPLAY "Program dua divisi siap dieksekusi.".
           STOP RUN.
text Keluaran
Divisi yang wajib ada: IDENTIFICATION
Divisi yang berisi logika: PROCEDURE
Program dua divisi siap dieksekusi.

Struktur berkasnya sederhana. Baris PROGRAM-ID. menamai program DUA-DIVISI, kemudian divisi PROCEDURE memuat empat pernyataan yang masing-masing ditutup titik, yaitu tiga DISPLAY dan satu STOP RUN. Ketiga operan literal pada DISPLAY masing-masing tampil pada barisnya sendiri karena verb ini menambahkan baris baru setiap kali selesai dieksekusi. Kompilasikan berkas tersebut dari direktori tempatnya disimpan.

bash
# kompilasi dan tautkan program dua divisi menjadi biner
cobc -x dua-divisi.cbl

Setelah kompilasi berhasil, jalankan ./dua-divisi untuk melihat kembali keluarannya.

Program lengkap empat divisi#

Program berikut memakai keempat divisi sekaligus. Divisi ENVIRONMENT menamai komputer penyusun dan pelaksana pada CONFIGURATION SECTION, lalu memetakan berkas logis ARSIP-NOTA ke nota.dat pada INPUT-OUTPUT SECTION. Divisi DATA mendeskripsikan record ARSIP-NOTA di FILE SECTION dan variabel kerja di WORKING-STORAGE SECTION. Divisi PROCEDURE menghitung rata-rata nilai nota tanpa pernah membuka ARSIP-NOTA, sehingga tidak ada berkas fisik nota.dat yang dibuat saat eksekusi.

cobol empat-divisi.cbl
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CATAT-KEUANGAN.
      * Bintang pada kolom 7 menjadikan baris ini komentar.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER. GNULINUX.
       OBJECT-COMPUTER. GNULINUX.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT ARSIP-NOTA ASSIGN TO "nota.dat".
       DATA DIVISION.
       FILE SECTION.
       FD  ARSIP-NOTA.
       01  REKAM-NOTA.
           05  NOMOR-NOTA     PIC X(6).
           05  NILAI-NOTA     PIC 9(7)V99.
       WORKING-STORAGE SECTION.
       01  TOTAL-NILAI        PIC 9(7)V99 VALUE 1750062.5.
       01  JUMLAH-NOTA        PIC 9(4) VALUE 250.
       01  RATA-RATA          PIC 9(7)V99 VALUE ZERO.
       PROCEDURE DIVISION.
           COMPUTE RATA-RATA = TOTAL-NILAI / JUMLAH-NOTA
           DISPLAY "Rata-rata nilai nota: " RATA-RATA
           STOP RUN.
text Keluaran
Rata-rata nilai nota: 0007000.25

Keluaran tersebut memuat beberapa perilaku yang penting dicermati. Field RATA-RATA bertipe PIC 9(7)V99, yaitu sembilan digit dengan dua digit terakhir sebagai desimal tersirat, sehingga nilai 7000.25 tampil sebagai 0007000.25, sembilan digit lengkap dengan titik yang disisipkan penampil GnuCOBOL pada posisi V. Nol depan ikut tampil karena field numerik tanpa picture hasil edit ditampilkan apa adanya. Perhitungan pada COMPUTE berjalan eksak karena aritmetika COBOL bekerja pada digit desimal, bukan bilangan biner.

Kompilasikan berkas lengkap ini dengan perintah yang sama polanya.

bash
# kompilasi dan tautkan program empat divisi
cobc -x empat-divisi.cbl

Jalankan ./empat-divisi, dan satu baris keluaran di atas akan tampil kembali.

Ringkasan#

  • Empat divisi dengan urutan tetap menyusun setiap program, dan hanya IDENTIFICATION serta PROCEDURE yang wajib.
  • IDENTIFICATION DIVISION memuat PROGRAM-ID sebagai identitas program, terutama untuk pemanggilan melalui CALL.
  • ENVIRONMENT DIVISION mengumpulkan ketergantungan mesin pada CONFIGURATION SECTION dan pemetaan berkas pada INPUT-OUTPUT SECTION.
  • DATA DIVISION memisahkan record berkas di FILE SECTION dari variabel kerja di WORKING-STORAGE SECTION, sedangkan PROCEDURE DIVISION mengeksekusi kalimat yang dibangun dari verb hingga STOP RUN.

Referensi#