Further with Clipper

Table of Contents
#1: Development Cycle
#2: Variables and Statements
#3: Preprocessor
#4: Code-Block
#5: Array
#6: Programming Convention
#7: Functions and Libraries


pengunjung sejak
September 1, 2000

Web Counter is a service provided by Digits.com


Terakhir diperbaharui tgl
5 August 2005
by Hianoto Santoso

Copyright © 2002-2005
by Hianoto Santoso

Search Now:
In Association with Amazon.com

In Association with Amazon.com


Bab 3. Preprocessor


Dalam bab ini, kita akan melihat fitur baru yang diperkenalkan dalam Clipper 5.x yaitu Preprocessor, termasuk konsep definisi konstanta semu, fungsi pengganti, dan perintah buatan sendiri.

Apakah Preprocessor Itu ?
Konstanta Semu


Apakah Preprocessor Itu ?
Sebenarnya proses kompilasi terbagi menjadi dua:

  1. Clipper akan menerjemahkan kode program kita menjadi suatu bentuk kode umum yang telah diproses sebelumnya (preprocessed)
  2. Selanjutnya, kode tersebut diterjemahkan menjadi p-code dan disimpan menjadi file .OBJ
Tahap pertama itulah yang merupakan Preprocessor, yang merupakan fasilitas sangat penting dalam Clipper yang memungkinkan kita menuliskan perintah buatan sendiri (User-Defined Commands) sehingga banyak kemajuan yang dialami oleh pembuat library tambahan untuk Clipper, misalnya Class(y) dan FiveWin, mereka semua banyak sekali menggunakan preprocessor secara intensif untuk memudahkan pemrogram dalam menggunakan library mereka.

Go Top


Konstanta Semu
Apakah Anda sering menggunakan suatu nilai yang dimasukkan secara statis dalam program ??

function main()
   local nKey

   ? "Tekan [F5] -> Tambah, [F6] -> Edit, [F8] -> Hapus"
   nKey := inkey( 0 )
   do case
   case nKey == -4     // F5
      addBrg()
   case nKey == -5     // F6
      edtBrg()
   case nKey == -7     // F8
      delBrg()
   endcase
return nil

Cara diatas jelas akan menyulitkan Anda untuk mengerti kode program yang Anda tulis, bahkan orang lain. Ada pendekatan lain untuk mengatasi hal ini, yaitu dengan menggunakan variabel (bisa Public, Private, maupun Local) seperti pada contoh berikut:

MemVar keyF5, keyF6, keyF8

function main()
   local nKey

   ? "Tekan [F5] -> Tambah, [F6] -> Edit, [F8] -> Hapus"
   nKey := inkey( 0 )
   do case
   case nKey == keyF5
      addBrg()
   case nKey == keyF6
      edtBrg()
   case nKey == keyF8
      delBrg()
   endcase
return nil


init function initVar()

   keyF5 := -4
   keyF6 := -5
   keyF8 := -7
return nil

Namun cara kedua ini masih belum sempurna karena akan muncul konsumsi memory tambahan untuk semua variabel yang kita gunakan dalam code diatas.

Clipper 5.x memberikan penyelesaian yang luar biasa, mampu mengatasi kesulitan memahami kode sumber program, namun tidak mengkonsumsi memory tambahan. Hal ini dilakukan dengan memanfaatkan directive #define, yang juga dikenal dengan istilah konstanta semu, dimana Clipper akan menggantikan nilai konstanta semu tersebut saat compile; cara kerjanya sangatlah mirip dengan fungsi "Search and Replace" pada aplikasi pemroses kata.

#define keyF5		-4
#define keyF6		-5
#define keyF8		-7

function main()
   local nKey

   ? "Tekan [F5] -> Tambah, [F6] -> Edit, [F8] -> Hapus"
   nKey := inkey( 0 )
   do case
   case nKey == keyF5
      addBrg()
   case nKey == keyF6
      edtBrg()
   case nKey == keyF8
      delBrg()
   endcase
return nil

Lalu muncul pertanyaan kedua, bagaimana bila kita mempunyai beberapa file PRG yang membutuhkan konstanta semu seperti keyF5, keyF6, dst ?? Untunglah Clipper menyediakan fasilitas #include yang akan menyertakan file-file tambahan saat proses compile.

// Umum.ch
#define keyF5		-4
#define keyF6		-5
#define keyF8		-7

// Main.prg
#include "Umum.ch"

function main()
   local nKey

   ? "Tekan [F5] -> Tambah, [F6] -> Edit, [F8] -> Hapus"
   nKey := inkey( 0 )
   do case
   case nKey == keyF5
      addBrg()
   case nKey == keyF6
      edtBrg()
   case nKey == keyF8
      delBrg()
   endcase
return nil

Terlihat pada contoh diatas, kita mempunyai sebuah file header yang bernama "umum.ch" yang dapat dipakai bersama-sama dengan beberapa file PRG, dengan cara menambahkan instruksi #include "umum.ch" pada file-file PRG tersebut.

Clipper juga telah menyediakan sekian banyak file header untuk konstanta semu yang sangat sering kita pakai, misalnya kode INKEY pada file INKEY.CH, kode BOX pada file BOX.CH, kode SETTING pada SET.CH, dan suatu file header yang maha penting yaitu STD.CH; kita akan melihat ulasan lebih detail pada bagian selanjutnya dalam bab ini.

Go Top


Notes: Bab ini masih belum selesai, cuman saya kali ini menggunakan cara iteratif, sehingga setiap bab akan saya kunjungi lagi dalam sirkular untuk penambahan materi dan penyempurnaan.. rada niru RUP - Rational Unified Process nih yee :-)