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
|
|
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:
- Clipper akan menerjemahkan kode program kita menjadi suatu bentuk kode
umum yang telah diproses sebelumnya (preprocessed)
- 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 :-)
|