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 2. Variabel dan Statemen
Bab ini akan membahas mengenai scope variable dan bagaimana menggunakannya secara lebih tepat. Selain
itu, ada beberapa statemen penting yang harus diketahui saat mengembangkan aplikasi Clipper.
Variabel Public
Variabel Private
Variabel Local
Variabel Static
Catatan Tambahan
Variabel Public
Variabel Public merupakan variabel yang dikenal oleh semua rutin yang ada, tanpa tergantung hirarki
rutin dan lokasi dimana variabel public tersebut dideklarasikan. Dalam penerapannya, referensi
variabel public akan disimpan pada suatu tabel simbol. Dalam penggunaan Clipper 5.x, perintah
PUBLIC merupakan perintah yang sebaiknya dihindari, karena berbahaya bagi projek dengan beberapa
pemrogram (team programming), dimana seseorang dapat secara tak sengaja merubah isi variabel
public yang digunakan oleh pemrogram yang lain. Selain itu, jalannya aplikasi menjadi lebih
lambat karena aplikasi harus melihat tabel simbol terlebih dahulu, barulah dapat mengambil
maupun mengubah nilai variabel tersebut.
// Demo akan berbahayanya variabel public
function main()
public TimeStart
// Jalankan beberapa modul
modul01()
modul02() // Baru saja disisipkan
modul03()
return nil
// Dibuat oleh Programmer A
function modul01()
TimeStart := time()
// Proses jalan
return nil
// Dibuat oleh Programmer B
function modul02()
TimeStart := seconds()
// Proses jalan
? "Time elapsed:", seconds() - TimeStart
return nil
// Dibuat oleh Programmer A
function modul03()
// Akan error karena TimeStart sekarang typenya numeric
? val( subStr( TimeStart, 1, 2 ) ) * 3600
return nil
Untuk bisa mengurangi penggunaan variabel public, kita dapat memanfaatkan fungsi dPublic(). Fungsi ini
akan saya jelaskan dengan lebih rinci pada bagian pembahasan Variabel Static pada bab ini. Namun untuk
penggunaannya, dapat Anda lihat pada contoh sebagai berikut:
// Contoh penggunaan dPublic()
function main()
dPublic( "cPID", "Aplikasi Utama" )
modul01()
? dPublic( "cPID" ) // Menjadi "Modul 01"
return nil
// Modul lain yang mengubah nilai elemen dPublic
function modul01()
? dPublic( "cPID" ) // Masih "Aplikasi Utama"
dPublic( "cPID", "Modul 01" )
return nil
Go Top
Variabel Private
Variabel Private hampir serupa dengan variabel Public, hanya saja variabel
Private akan dikenal pada modul yang mendeklarasikan variabel tersebut sampai
pada semua modul yang dipanggil dari modul tadi; sedangkan modul yang diatas
tidak akan mengenal variabel private yang dideklarasikan dibawahnya. Karena
hampir sama dengan variabel Public, maka variabel Private juga tidak disarankan
dalam Clipper 5.x.
Go Top
Variabel Local
Variabel Local merupakan variabel yang hanya dikenal pada function / procedure
dimana dia dideklarasikan dan secara otomatis dibuang dari memory saat kontrol
program telah keluar dari function / procedure tersebut. Hal penting lain,
variabel Local tidak disimpan pada tabel simbol namun pada xxx sehingga tidak
dapat digunakan dalam operasi macro namun lebih cepat diakses daripada
variabel Public / Private.
Go Top
Variabel Static
Variabel Static merupakan variabel yang unik di lingkungan pemrograman xBase.
Variabel Static akan memelihara isinya sampai aplikasi berhenti, walaupun
kontrol program tidak berada dalam PRG ataupun function yang mendeklarasikannya.
Ada dua jenis scope untuk variabel Static, yaitu:
- Scope dalam Function / Procedure, jadi variabel ini hanya dikenal
dalam function / procedure tempat dia dideklarasikan, namun isi variabel
akan tetap dipertahankan.
- Scope dalam PRG, dimana semua function / procedure akan mengenal variabel
ini selama terletak pada PRG yang sama. Namun untuk ini, kita harus
mendeklarasikan variabel Static diluar semua deklarasi function dan
procedure dan dikompilasi dengan option /n
// Contoh penggunaan Static
// Harus dikompilasi dengan option /n
static cFileWide := "ABC"
function main()
local nCounter
? cFileWide
for nCounter := 1 to 100
subMain()
next
return nil
function subMain()
static nCounter2 := 0
nCounter2 := nCounter2 + 1
? cFileWide + lTrim( str( nCounter2 ) )
return nil
Dari contoh diatas, terlihat variabel cFileWide dikenal di function main()
maupun subMain() karena dideklarasikan pada bagian awal program dan
dikompilasi dengan option /n. Perhatikan variabel nCounter2 bernilai awal 0
dan ditambah dengan 1 untuk setiap kali pemanggilan program, hal ini
menunjukkan bahwa variabel nCounter2 tidak kehilangan nilainya walaupun telah
keluar dari modul subMain() dan kode program untuk inisialisasi variabel
nCounter2 hanya dijalankan satu kali saja.
Go Top
Catatan Tambahan
Ada beberapa hal yang harus diperhatikan saat membahas variabel, sebagai berikut:
Deklarasi MEMVAR dan FIELD
Bilamana kita menggunakan variabel Public atau Private (misalnya cKode), maka
Clipper akan memberikan warning C1003: Ambiguous reference: 'cKode', karena
Clipper tidak tahu apakah cKode merupakan variabel memori ataupun field.
Untuk itu, kita perlu memberikan deklarasi Memvar atau Field untuk referensi
variabel memori ataupun field. Untuk jelasnya, lihat pada contoh berikut:
function main()
local cLocal
static cStatic
field cField
memVar cPublic, cPrivate
public cPublic := "Public"
private cPrivate := "Private"
// ......
return nil
Perhatikan urutan penulisan, dimana perintah Local, Static, Field, dan Memvar
merupakan compile-time statement, sehingga harus diletakkan pada bagian awal
setelah pendeklarasian function / procedure. Sedangkan perintah Public dan
Private merupakan executable statement, jadi ditulis pada urutan setelah
compile-time statement.
Macro dan Variabel
Seperti yang tadi saya utarakan, penggunaan variabel Public dan Private
sebaiknya dikurangi bahkan dihentikan bilamana memungkinkan, karenanya kita
perlu menggantinya dengan variabel Local dan Static yang akan menyebabkan
aplikasi kita berjalan lebih cepat karena Clipper tidak perlu mengakses tabel
simbol saat aplikasi dijalankan. Namun demikian, bagi Anda yang terbiasa
menggunakan macro (&), muncul masalah karena macro (&) tidak dapat
mengakses variabel Local dan Static, seperti terlihat dalam contoh
berikut ini:
nCounter := 1
cVarName := "nCounter"
? &cVarName // akan muncul error bila nCounter adalah Local/Static
Hati-hati saat Anda memeriksa type variabel dengan fungsi TYPE(), karena fungsi
ini menggunakan macro secara internal, sehingga hanya dapat digunakan untuk
variabel Public ataupun Private. Sebaliknya Anda haruslah menggunakan fungsi
VALTYPE() untuk memeriksa type variabel Local atau Static.
function main()
local nLocal := 1
memVar nPublic
public nPublic := 1
? valType( nLocal ) // Hasilnya "N"
? type( "nPublic" ) // Hasilnya "N"
return nil
Perhatikan bahwa Anda menyebutkan nama variabel secara langsung dalam
parameter VALTYPE(), dan Anda harus menggunakan nama variabel dalam tanda kutip
sebagai parameter TYPE(); sehingga tampak jelas bahwa TYPE() menggunakan macro
secara internal.
Namun, pada beberapa kasus, kita dapat menyiasati agar dapat menggunakan macro
tanpa perlu mendefinisikan variabel Public ataupun Private, dan kapan kita
sebaiknya menggunakan macro. Mari kita amati beberapa penggunaan macro
sebagai berikut:
- Menggunakan variabel sebagai parameter untuk perintah (command argument), seperti:
// Penggunaan macro seperti ini
use &cNamaDBF
rename &cNamaLama to &cNamaBaru
// Dapat dirubah menjadi
use ( cNamaDBF )
rename ( cNamaLama ) to ( cNamaBaru )
- Sedapat mungkin, kita hanya menggunakan macro untuk membuat Code-Block;
topik ini akan dibahas lebih detail di Bab 4 mengenai Code Block, namun
berikut ini adalah contoh sederhana mengenai implementasi macro tersebut:
cFor := "brgKode = cBrgKode"
bFor := &( "{|| " + cFor + " }"
go top
do while ! eof()
if eval( bFor )
? brgNama, brgSatuan, brgHrgBeli, brgHrgJual
endif
skip
enddo
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 :-)
|