![]() |
|
Marco Cantù's |
Bab 2
|
Sebelum kita maju ke topik penulisan perintah bahasa Pascal, sangatlah penting untuk menyoroti beberapa elemen untuk gaya penulisan Pascal. Pertanyaan yang saya ajukan ini adalah: Disamping aturan penulisan, bagaimanakah Anda seharusnya menulis code? Tidak ada satu jawaban untuk pertanyaan ini, karena selera pribadi memberikan berbagai gaya penulisan. Namun demikian, ada beberapa prinsip yang Anda perlu ketahui mengenai komentar, huruf besar, spasi, dan pencetakan-indah (pretty-printing). Secara umum, tujuan dari semua gaya penulisan adalah kejelasan. Keputusan yang Anda buat mengenai gaya dan format merupakan bentuk indikator mengenai tujuan dari sebagian code. Suatu alat bantu yang penting bagi kejelasan adalah konsistensi - apapun gaya yang Anda pilih, pastikan untuk mengikutinya secara konsisten dalam sebuah proyek.
Dalam Pascal, komentar dituliskan diantara kurung kurawal ataupun kurung buka/tutup diikuti dengan tanda bintang. Delphi juga menerima cara penulisan komentar dalam C++, yang dapat diberlakukan sampai akhir baris:
{ini adalah komentar} (* ini adalah komentar yang lain *) // ini adalah komentar sampai pada akhir baris
Bentuk pertama lebih singkat dan lebih umum digunakan. Bentuk kedua lebih disukai di Eropa karena kebanyakan keyboard Eropa tidak mempunyai simbol kurung kurawal. Bentuk ketiga dipinjam dari C++ dan tersedia hanya dalam Delphi versi 32-bit. Komentar sampai pada akhir baris sangatlah bermanfaat untuk komentar pendek dan untuk menonaktifkan suatu baris code.
Dalam listing buku ini saya akan berusaha untuk menampilkan komentar dalam cetak miring (dan kata kunci dalam cetak tebal), agar konsisten dengan cara penampilan dalam Delphi secara default.
Dengan adanya tiga macam bentuk komentar sangatlah berguna dalam membuat komentar yang bersarang/bertingkat. Jika Anda ingin menonaktifkan beberapa baris code, dan kesekian baris ini mengandung beberapa komentar sesungguhnya, Anda tidak dapat menggunakan tanda komentar yang sama:
{ ... code {komentar, akan mengakibatkan masalah} ... code }
Dengan tanda komentar yang kedua, Anda dapat menuliskan code berikut, yang benar:
{ ... code //komentar ini OK ... code }
Perhatikan bilamana tanda kurung kurawal buka maupun kurung buka dan bintang diikuti dengan tanda dollar ($), ini akan menjadi compiler directive, seperti ini {$X+}.
Sebenarnya, compiler directive juga masih merupakan komentar. Misalnya, {$X+ Ini adalah komentar} adalah benar. Ini merupakan direktif yang benar dan sekaligus sebuah komentar, meskipun pemrogram yang baik akan berusaha memisahkan direktif dan komentar.
Kompiler Pascal (tidak seperti pada bahasa pemrograman lain) tidak memperhatikan cara penulisan (huruf besar/kecil) dari huruf yang digunakan. Karenanya, penamaan Myname, MyName, myname, myName, dan MYNAME adalah sama persis. Secara keseluruhan, ini merupakan hal yang positif, karena pada bahasa pemrograman yang case-sensitive, banyak kesalahan pemrograman yang disebabkan karena penggunaan huruf besar/kecil yang tidak benar.
Catatan: Hanya ada satu pengecualian pada aturan case-insensitive dalam Pascal: prosedur Registerdari sebuah package component harus diawali dengan huruf besar R, karena masalah kompatibilitasan dengan C++Builder.
Walau demikian, ada beberapa kerugian. Pertama, Anda harus sadar bahwa penamaan adalah sama, sehingga Anda harus menghindari penggunaannya sebagai elemen yang berbeda. Kedua, Anda harus berusaha konsisten dalam penggunaan huruf besar/kecil, untuk membantu pembacaan code.
Suatu penggunaan konsisten dari huruf besar/kecil tidaklah dipaksa oleh kompiler, tapi merupakan suatu kebiasaan yang baik untuk dilakukan. Suatu pendekatan umum adalah dengan menggunakan huruf besar untuk huruf pertama dari penamaan. Ketika sebuah penamaan disusun dari beberapa kata yang dihubungkan (Anda tidak dapat menyisipkan spasi dalam sebuah nama), maka huruf pertama dari kata tersebut seharusnya ditulis dalam huruf besar:
MyLongIdentifier MyVeryLongAndAlmostStupidIdentifier
Elemen lain yang diabaikan oleh kompiler adalah spasi, baris baru, dan tab yang Anda tambahkan dalam source code. Semua elemen ini secara kolektif dikenal sebagai white space. White space digunakan hanya untuk mempermudah pembacaan code; dia tidak mempengaruhi proses kompilasi.
Tidak seperti BASIC, Pascal memperkenankan Anda untuk menulis sebuah perintah dalam beberapa baris code, memecah sebuah perintah yang panjang ke dua atau lebih baris. Kerugiannya (setidaknya untuk kebanyakan pemrogram BASIC) untuk memperbolehkan perintah dalam lebih dari satu baris adalah Anda harus ingat untuk menambahkan sebuah tanda titik koma untuk mengindikasikan akhir perintah, atau lebih tepatnya, untuk memisahkan sebuah perintah dari perintah berikutnya. Perhatikan bahwa keterbatasan dalam memecah perintah pemrograman dalam baris yang berbeda adalah sebuah string tidak diperbolehkan melebihi satu baris.
Sekali lagi, tidak ada aturan baku untuk penggunaan spasi dan perintah beberapa baris, namun ada beberapa hal yang patut diperhatikan:
Saran terakhir untuk penggunaan white space berhubungan dengan gaya penulisan bahasa Pascal, yang dikenal dengan pencetakan indah. Aturan ini sangat mudah: Tiap kali Anda akan menulis suatu perintah majemuk, berikan indentasi dua spasi ke kanan untuk sisa perintah yang akan dituliskan. Sebuah perintah majemuk dalam perintah majemuk yang lain diberikan indentasi empat spasi, dan seterusnya:
if ... then statement; if ... then begin statement1; statement2; end; if ... then begin if ... then statement1; statement2; end;
Format diatas didasarkan pada pencetakan indah, tapi para pemrogram mempunyai interpretasi yang berbeda mengenai aturan ini. Beberapa pemrogram memberikan indentasi pada perintah begin dan end dengan level yang sama dengan code didalam, beberapa yang lain mengindentasi begin dan end lalu mengindentasi code didalam sekali lagi, pemrogram yang lain meletakkan begin pada baris yang sama dengan if. Hal ini hanyalah masalah selera pribadi saja.
Format indentasi yang serupa juga sering digunakan untuk daftar variabel atau tipe data, dan untuk melanjutkan perintah dari baris sebelumnya:
type Letters = set of Char; var Name: string; begin { komentar panjang dan perintah panjang, dilanjutkan pada baris ini dan diindentasi dua spasi } MessageDlg ('This is a message', mtInformation, [mbOk], 0);
Tentu saja konvensi seperti ini hanyalah sebuah saran untuk membuat code menjadi mudah dibaca oleh pemrogram yang lain, dan keseluruhan ini akan diabaikan oleh kompiler. Saya telah mencoba menggunakan aturan ini secara konsisten dalam semua contoh dan cuplikan code dalam buku ini. Contoh source code, manual, dan Help dalam Delphi menggunakan gaya penulisan format yang serupa.
Untuk memudahkan pembacaan dan penulisan code Pascal, editor Delphi editor mempunyai sebuah fitur bernama color syntax highlighting. Tergantung dari arti kata yang Anda ketikkan dalam editor, mereka akan ditampilkan dengan warna yang berbeda. Secara default, kata kunci dicetak tebal, string dan komentar dalam warna (dan seringnya dalam cetak miring), dan seterusnya.
Kata dicadangkan (reserved word), komentar, dan string adalah tiga elemen yang sangat diuntungkan dengan fitur ini. Anda bisa melihat secara sekilas sebuah keyword yang salah ketik, string yang tidak diterminasi dengan benar, dan panjang komentar beberapa baris.
Anda juga dengan mudah dapat mengatur setting syntax highlight menggunakan halaman Editor Colors dari dialog Environment Options (lihat Gambar 2.1). Jika Anda bekerja sendirian, pilihlah warna yang Anda sukai. Jika Anda bekerjasama dengan pemrogram lain, Anda semua harus menyetujui suatu aturan warna standar. Saya menemukan bahwa bekerja pada sebuah komputer dengan pewarnaan yang berbeda dengan yang biasa saya pakai benar-benar menyulitkan.
Gambar 2.1: Dialog untuk mengatur color syntax highlighting.
Catatan: Dalam buku ini saya mencoba untuk menerapkan pewarnaan pada listing source code. Saya berharap hal ini benar-benar membuatnya lebih mudah dibaca.
Delphi 3 memperkenalkan fitur baru yang berhubungan dengan proses edit source code. Karena saat menuliskan perintah bahasa Pascal Anda sering mengulangi urutan kata kunci yang sama, Borland menyediakan sebuah fitur bernama Code Template. Sebuah Code Template adalah sepotong cuplikan code dengan kependekan tertentu. Anda ketikkan kependekan tersebut, lalu tekan Ctrl+J, dan potongan code yang lengkap akan muncul. Misalkan, jika Anda mengetikkan arrayd, dan lalu menekan Ctrl+J, editor Delphi akan mengubah teks Anda menjadi:
array [0..] of ;
Karena code templates yang telah didefinisikan sebelumnya umumnya menyertakan beberapa versi dari konstruksi yang sama, kependekan biasanya diakhiri dengan sebuah huruf mengindikasikan versi mana yang ingin Anda gunakan. Namun demikian, Anda juga dapat mengetikkan bagian awal dari kependekan tadi. Misalnya, jika Anda ketik ar dan menekan Ctrl+J, editor akan menampilkan sebuah menu lokal berisi daftar pilihan beserta deskripsi singkat, yang dapat Anda lihat pada Gambar 2.2.
Gambar 2.2: Pilihan Code Templates
Anda dapat mengatur code template secara keseluruhan dengan mengubah yang telah ada atau menambahkan cuplikan code Anda sendiri. Jika Anda melakukan ini, ingatlah bahwa teks dari code template biasanya mengandung karakter '|' untuk mengindikasikan dimana kursor harus diletakkan setelah operasi tersebut, yaitu dimana Anda mulai mengetik untuk melengkapi template dengan code Anda sendiri.
Setelah Anda mendefinisikan beberapa nama, Anda dapat menggunakannya dalam statement dan ekspresi yang merupakan bagian dari beberapa statement. Pascal menawarkan beberapa statement dan ekspresi. Mari kita lihat kata kunci, ekspresi, dan operator terlebih dahulu.
Kata kunci merupakan nama yang dicadangkan oleh Object Pascal, yang berperan penting dalam bahasa pemrograman. Help Delphi membedakan antara kata dicadangkan dan direktif: kata dicadangkan tidak dapat digunakan sebagai penamaan, sementara direktif seharusnya tidak digunakan sebagai nama, walaupun kompiler akan menerima hal ini. Dalam prakteknya, Anda tidak seharusnya menggunakan kata kunci sebagai penamaan.
Dalam Tabel 2.1 Anda dapat melihat daftar lengkap dari penamaan yang mempunyai peran tertentu dalam bahasa Object Pascal (dalam Delphi 4), termasuk kata kunci dan kata dicadangkan lainnya.
Tabel 2.1: Kata Kunci dan Kata Dicadangkan Lainnya dalam Bahasa Object Pascal
Kata Kunci | Peran |
---|---|
absolute | directive (variables) |
abstract | directive (method) |
and | operator (boolean) |
array | type |
as | operator (RTTI) |
asm | statement |
assembler | backward compatibility (asm) |
at | statement (exceptions) |
automated | access specifier (class) |
begin | block marker |
case | statement |
cdecl | function calling convention |
class | type |
const | declaration atau directive (parameters) |
constructor | special method |
contains | operator (set) |
default | directive (property) |
destructor | special method |
dispid | dispinterface specifier |
dispinterface | type |
div | operator |
do | statement |
downto | statement (for) |
dynamic | directive (method) |
else | statement (if atau case) |
end | block marker |
except | statement (exceptions) |
export | backward compatibility (class) |
exports | declaration |
external | directive (functions) |
far | backward compatibility (class) |
file | type |
finalization | unit structure |
finally | statement (exceptions) |
for | statement |
forward | function directive |
function | declaration |
goto | statement |
if | statement |
implementation | unit structure |
implements | directive (property) |
in | operator (set) - project structure |
index | directive (dipinterface) |
inherited | statement |
initialization | unit structure |
inline | backward compatibility (lihat asm) |
interface | type |
is | operator (RTTI) |
label | declaration |
library | program structure |
message | directive (method) |
mod | operator (math) |
name | directive (function) |
near | backward compatibility (class) |
nil | value |
nodefault | directive (property) |
not | operator (boolean) |
object | backward compatibility (class) |
of | statement (case) |
on | statement (exceptions) |
or | operator (boolean) |
out | directive (parameters) |
overload | function directive |
override | function directive |
package | program structure (package) |
packed | directive (record) |
pascal | function calling convention |
private | access specifier (class) |
procedure | declaration |
program | program structure |
property | declaration |
protected | access specifier (class) |
public | access specifier (class) |
published | access specifier (class) |
raise | statement (exceptions) |
read | property specifier |
readonly | dispatch interface specifier |
record | type |
register | function calling convention |
reintroduce | function directive |
repeat | statement |
requires | program structure (package) |
resident | directive (functions) |
resourcestring | type |
safecall | function calling convention |
set | type |
shl | operator (math) |
shr | operator (math) |
stdcall | function calling convention |
stored | directive (property) |
string | type |
then | statement (if) |
threadvar | declaration |
to | statement (for) |
try | statement (exceptions) |
type | declaration |
unit | unit structure |
until | statement |
uses | unit structure |
var | declaration |
virtual | directive (method) |
while | statement |
with | statement |
write | property specifier |
writeonly | dispatch interface specifier |
xor | operator (boolean) |
Tidak ada aturan umum untuk pembuatan suatu ekspresi, karena sangat tergantung pada operator yang digunakan, dan Pascal mempunyai sekian banyak operator. Ada operator logika, aritmetika, boolean, relasi, dan set, ditambah beberapa yang lain. Ekspresi dapat digunakan untuk menentukan nilai yang akan diberikan pada suatu variabel, untuk menghitung parameter dari function atau procedure, atau untuk memeriksa suatu kondisi. Ekspresi dapat menyertakan panggilan function juga. Tiap kali Anda melakukan operasi pada nilai suatu identifier, ketimbang menggunakan identifier itu sendiri, hal ini adalah ekspresi.
Ekspresi umum digunakan dalam kebanyakan bahasa pemrograman. Sebuah ekspresi adalah kombinasi yang valid dari konstanta, variabel, nilai literal, operator, dan hasil kembalian function. Ekspresi juga dapat digunakan untuk parameter value dari procedure dan function, tapi tidak selalu untuk parameter reference (yang memerlukan suatu nilai yang dapat Anda berikan).
Jika Anda pernah menulis sebuah program dalam hidup Anda, Anda tentunya tahu apakah ekspresi itu. Disini, saya akan menerangkan beberapa elemen dari operator di Pascal. Anda dapat melihat daftar operator bahasa ini, dikelompokkan dalam Urutan Pengerjaan, seperti pada Tabel 2.1.
Kontras dengan kebanyakan bahasa pemrograman lainnya, operator and dan or lebih dahulu dikerjakan ketimbang operator relasional. Jadi jika Anda menulis a < b and c < d, kompiler akan mencoba menjalankan operasi and terlebih dahulu, akibatnya muncul kesalahan kompilasi. Untuk ini, Anda seharusnya menambahkan tanda kurung diantara ekspresi: (a < b) and (c < d).
Beberapa operator umum mempunyai arti yang berbeda dengan tipe data yang berbeda pula. Misalnya, operator + dapat digunakan untuk menambahkan dua angka, menggabung dua string, menggabungkan dua set, dan bahkan menambahkan ofset dari suatu pointer PChar. Namun demikian, Anda tidak dapat menambahkan dua huruf, seperti yang dimungkinkan dalam C.
Sebuah operator yang aneh adalah div. Dalam Pascal, Anda dapat membagi dua bilangan apapun (real maupun integer) dengan operator /, dan Anda akan selalu mendapatkan hasil bilangan real. Jika Anda ingin membagi dua bilangan integer dan menginginkan hasil dalam bentuk integer, gunakan operator div.
Tabel 2.2: Operator Bahasa Pascal, Dikelompokkan berdasarkan Urutan Pengerjaan
Operator Unary (Urutan Tertinggi) | |
---|---|
@ | Alamat variabel atau function (mengembalikan sebuah pointer) |
not | Boolean atau bitwise not |
Operator Multiplicative dan Bitwise | |
* | Perkalian aritmetika atau set intersection |
/ | Pembagian floating-point |
div | Pembagian integer |
mod | Modulus (sisa hasil pembagian) |
as | Memungkinkan konversi tipe yang terperiksa saat runtime (bagian dari dukungan RTTI) |
and | Boolean atau bitwise and |
shl | Bitwise left shift |
shr | Bitwise right shift |
Operator Tambahan | |
+ | Penambahan aritmetika, set union, penggabungan string, penambahan offset pointer |
- | Pengurangan aritmetika, set difference, pengurangan offset pointer |
or | Boolean atau bitwise or |
xor | Boolean atau bitwise exclusive or |
Operator Relatsional dan Perbandingan (Urutan Terendah) | |
= | Memeriksa apakah sama |
<> | Memeriksa apakah tidak sama |
< | Memeriksa apakah lebih kecil dari |
> | Memeriksa apakah lebih besar dari |
<= | Memeriksa apakah lebih kecil atau sama dengan, atau bagian dari suatu set |
>= | Memeriksa apakah lebih besar atau sama dengan, atau superset dari suatu set |
in | Memeriksa apakah item tersebut merupakan anggota dari suatu set |
is | Memeriksa apakah suatu object mempunyai tipe yang kompatibel (sebuah operator RTTI) |
Operator set termasuk union (+), difference (-), intersection (*),membership test (in), dan beberapa operator relasional. Untuk menambahkan suatu elemen kedalam suatu set, Anda dapat menggunakan operator union dari suatu set dengan set yang lain untuk elemen yang Anda butuhkan. Berikut ini adalah contoh Delphi yang berhubungan dengan font style:
Style := Style + [fsBold]; Style := Style + [fsBold, fsItalic] - [fsUnderline];
Sebagai alternatif, Anda dapat menggunakan prosedur Include dan Exclude, yang lebih efisien (namun tidak bisa digunakan dengan component properties dari type set, karena mereka memerlukan parameter berbentuk l-value):
Include (Style, fsBold);
Sekarang kita mengetahui struktur dasar dari suatu program Pascal, kita sekarang siap untuk mempelajari artinya secara lebih detil. Kita akan mulai dengan mengeksplorasi definisi dari tipe data yang predefined dan yang didefinisikan user, lalu kita akan belajar penggunaan kata kunci untuk membentuk perintah pemrograman.
© Copyright Marco Cantù, Wintech Italia Srl 1995-2000
© Copyright of the Indonesian Translation by Hianoto Santoso, 2002