Perbandingan Perulangan Bahasa Basic, Pascal dan C

Tuesday, December 28, 2010 , 0 Comments

Seperti yang telah tertulis dalam artikel sebelumnya, konstruksi perulangan dibedakan menjadi dua macam, yaitu perulangan tak kondisional dan perulangan kondisional. Perulangan kondisional sendiri masih dapat dibagi lagi menjadi dua macam, yaitu perulangan dengan pengecekan kondisinya berada di depan (sebelum setiap langkah dimulai) dan perulangan yang pengecekan kondisinya di bagian belakang atau akhir setiap langkah.


Artikel ini merupakan kelanjutannya, dengan lebih mefokuskan pada penjelasan implementasi konstruksi perulangan di berbagai bahasa pemrograman yang ada saat ini disertai dengan perbandingannya. Walaupun pada akhirnya setiap bahasa memiliki implementasinya sendiri-sendiri namun masih banyak terdapat kemiripan yang muncul karena adanya kesamaan ide dasar.
Sebagai contoh, hampir semua bahasa pemrograman memiliki konstruksi for, walaupun implementasinya berbeda-beda. Perbedaan tersebut muncul dikarenakan perbedaan filosofi bahasanya itu sendiri, yang penitikberatannya bisa pada aspek kemudahan, keringkasan, keunikan atau pada kejelasan. Sehingga masing-masing implementasi memiliki kelebihan maupun kekurangannya masing-masing. Konstruksi for inilah yang sering digunakan untuk mengimplementasikan konsep perulangan tak kondisional. Walaupun begitu tidak semuanya menggunakan kata for. Bahasa pemrograman semacam FORTRAN atau PL/I menggunakan kata do, tapi intinya sama dengan pemakaian kata for pada bahasa yang lainnya.
Beberapa bahasa memiliki konstruksi perulangan yang menggunakan foreach (dari "for each" atau "untuk setiap") yang juga merupakan bentuk perulangan tak kondisional. Bentuk kalimat yang menggambarkan penggunaan foreach ini adalah: "Untuk setiap item di dalam sekumpulan item, lakukan sesuatu".
Bahasa yang full berorientasi pada objek semacam SmallTalk dan Ruby bahkan memiliki konstruksi perulangan yang lebih unik lagi. Dalam bahasa tersebut, perulangan bukan dijadikan sebagai konstruksi bahasa, tetapi merupakan metode dalam class bilangan.
Untuk bentuk perulangan kondisional, bentuk yang paling banyak digunakan adalah konstruksi while. Konstruksi ini digunakan untuk mewakili kalimat semacam "Selama masih memenuhi kondisi, lakukan sesuatu" atau "Lakukan sesuatu selama kondisi masih terpenuhi". Bahasa seperti Pascal juga memiliki konstruksi repeat..until yang pada dasarnya kebalikan dari while. Konstruksi repeat..until digunakan untuk mewakili kalimat semacam "Lakukan atau ulangi sesuatu hingga satu kondisi tertentu terpenuhi". Bahasa BASIC bahkan memiliki konstruksi do..loop yang lebih fleksibel lagi.

Bahasa BASIC

BASIC dibuat dengan sintaks yang sesederhana mungkin sehingga mudah dipahami oleh seorang pemula sekalipun. Seperti kebanyakan bahasa yang lain, BASIC juga menggunakan FOR untuk perulangan tak kondisional-nya. Bentuk umumnya adalah sebagai berikut:
FOR counter = awal TO akhir STEP langkah
  STATEMENTS
NEXT counter
Bentuk di atas digunakan jika nilai counter di setiap langkahnya dinaikkan menggunakan stepping (banyaknya perubahan nilai counter) sejumlah langkah. Nilai stepping digunakan untuk lompatan nilai pada counter. Sehingga nilai counter tidak harus berubah satu-satu tetapi bisa yang lainnya. Untuk melakukan perhitungan mundur (nilai counter menurun atau mengecil) maka cukup dengan menggunakan nilai stepping negatif. Jika nilai stepping atau langkah adalah satu maka cukup ditulis sebagai:
FOR counter = awal TO akhir
  STATEMENTS
NEXT counter
Sedangkan untuk perulangan kondisional, BASIC menggunakan konstruksi while..wend dan do..loop. Bentuk while..wend merupakan bentuk konstruksi perulangan yang sudah kuno dan sepenuhnya bisa digantikan dengan konstruksi do..loop. Dalam dialek BASIC yang lebih modern semacam Visual Basic, bentuknya digantikan menjadi while..end while. Sintaks konstruksi while dalam BASIC adalah:
WHILE kondisi
  STATEMENTS
WEND
Seperti telah disebutkan sebelumnya, bentuk while sepenuhnya dapat digantikan dengan bentuk do..loop. Konstruksi do..loop ini memiliki 4 variasi penulisan, yaitu do while..loop, do..loop while, do until..loop dan do..loop until. Konstruksi while yang sebelumnya dapat diganti menjadi bentuk do while..loop tanpa perubahan makna. Berikut ini sintaks dari keempat variasi penulisan konstruksi do..loop:
·            &nb  sp;   DO WHILE kondisi
·            &nb  sp;     STATEMENTS
·            &nb  sp;   LOOP
·            &nb  sp;   DO
·            &nb  sp;     STATEMENTS
·            &nb  sp;   LOOP WHILE kondisi
·            &nb  sp;   DO UNTIL kondisi
·            &nb  sp;     STATEMENTS
·            &nb  sp;   LOOP
·            &nb  sp;   DO
·            &nb  sp;     STATEMENTS
·            &nb  sp;   LOOP UNTIL kondisi

Bahasa Pascal atau Delphi

Sebagai bahasa yang diciptakan untuk tujuan edukasi, Bahasa Pascal dikenal dengan sintaksnya yang jelas dan mudah dibaca. Bentuk atau sintaks yang digunakan Pascal untuk konstruksi perulangan pun relatif lebih jelas daripada bahasa lainnya. Pascal membedakan perulangan tak kondisional menjadi dua, yaitu perulangan dengan nilai counter yang menaik dan satunya dengan nilai counter yang menurun.
Untuk perulangan dengan nilai counter naik digunakan sintaks berikut:
for counter := awal to akhir do begin
  Statements;
end;
Sedangkan untuk perulangan dengan nilai counter turun cukup dengan mengganti kata to menjadi downto, sebagai berikut:
for counter := awal downto akhir do begin
  Statements;
end;
Dalam Pascal dimungkinkan untuk menggunakan counter yang selain bilangan (integer). Semua data bertipe ordinal (memiliki urutan pasti) semacam char, boolean, enumeration dan subrange dapat dipakai sebagai counter.
Kelemahan Pascal adalah bahwa nilai counter pada setiap langkahnya hanya dapat berubah (naik atau turun) sebanyak satu nilai saja. Konstruksi for dalam Pascal tidak menyertakan nilai stepping yang secara default diberi nilai satu. Untuk nilai stepping yang lebih dari satu dalam Pascal harus menggunakan konstruksi repeat..until atau while yang jelas-jelas merupakan bentuk perulangan kondisional.
Sintaks untuk konstruksi perulangan kondisional dalam Pascal berturut-turut adalah sebagai berikut:
while Kondisi do begin
  Statements;
end;
dan
repeat
  Statements;
until Kondisi;

Bahasa C

Bahasa C yang lebih mengedepankan unsur keringkasan dan efisiensi kode, memiliki sintaks for yang lebih sulit dibaca daripada Pascal. Tentu saja bagi yang sudah terbiasa menjadi tidak sulit lagi, tetapi harus diakui bahwa bagi seorang pemula sintaks C cukup membingungkan. Walaupun demikian, sintaks perulangan dalam Bahasa C ini banyak diadopsi ke berbagai bahasa pemrograman yang lain. Sebut saja bahasa-bahasa semacam C++, Perl, PHP, Java dan JavaSript, semuanya mengadopsi bentuk perulangan itu.
Bentuk umum penulisan sintaks perulangan tak kondisional dalam C adalah:
int counter;
for (counter = awal; counter <= akhir; counter += langkah) {
  statements;
}
Sintaks C ini sebenarnya yang paling dekat dengan pengertian bahwa perulangan tak kondisional bisa ditulis sebagai perulangan kondisional yang menggunakan counter. Struktur perulangan for dalam Bahasa C memanfaatkan tiga ekspresi yang tertulis di dalam tanda kurung dan dipisahkan dengan tanda titik koma. Ekspresi pertama merupakan sebuah statement yang menandakan inisialisasi perulangan, yang pada bentuk di atas digunakan untuk memberi nilai awal pada counter. Ekspresi kedua menyatakan kondisi yang menentukan jalannya perulangan, yang pada bentuk di atas ditandai dengan pengecekan apakah nilai counter masih belum melampaui nilai akhir. Maksudnya jika nilai ekspresi kedua ini masih bernilai true maka perulangan masih akan dijalankan, sebaliknya jika sudah bernilai false maka perulangan akan berakhir. Ekspresi ketiga berisi statement yang akan dijalankan di akhir setiap langkah dalam perulangan tersebut, yang pada bentuk di atas berisi statement untuk mengubah nilai counter ke nilai berikutnya. Jika nilai counter akan dinaikkan satu-satu di setiap langkah maka ekspresi ketiga cukup ditulis counter++ (singkatan dari counter += 1)atau jika diturunkan satu-satu maka cukup ditulis counter--.
Dengan demikian dapat disimpulkan bahwa konstruksi for dalam C ini merupakan konstruksi perulangan yang sangat fleksibel. Penggunaan counter di dalamnya hanyalah bersifat opsional. Bahkan lebih tepat kalau dikatakan bahwa perulangan for pada C sebenarnya adalah bentuk perulangan kondisional, berhubung di dalam ekspresi kedua terkandung suatu kondisi yang menentukan jalannya perulangan. Hanya saja memang kebanyakan programmer C menggunakan bentuk for untuk perulangan tak kondisional (dalam artian menggunakan counter), sedangkan untuk perulangan kondisional-nya lebih memilih menggunakan while atau do..while.
Konstruksi while dalam C memiliki kesamaan arti dengan konstruksi while..wend dalam BASIC atau while dalam Pascal. Sintaksnya adalah:
while (kondisi) {
  statements;
}
Sementara itu konstruksi do..while memiliki arti sama dengan do..loop while dalam BASIC, yang sintaksnya adalah:
do {
  statements;
} while (kondisi);
Bahasa C tidak mengenal bentuk yang menggunakan until atau "hingga" seperti halnya Pascal dan BASIC. Dalam C hanya ada bentuk while atau "selama". Sekali lagi alasannya adalah penitikberatan C pada segi keringkasan bahasa. Bentuk until sebenarnya dapat diwakili menggunakan bentuk while not atau "selama tidak/belum". Contohnya kalimat "Budi terus berlari hingga lelah" sebenarnya sama saja dengan kalimat "Budi terus berlari selama belum lelah".
Dalam C, bentuk while sebenarnya dapat diubah ke dalam bentuk for. Jika ada bentuk while seperti terlihat di bawah ini:
ekspr1;
while (ekspr2) {
  statements;
  ekspr3;
}
maka bentuk tersebut dapat diubah ke dalam bentuk for menjadi:
for (ekspr1; ekspr2; ekspr3) {
  statements;
}
Dari sini jelas sudah penjelasan sebelumnya yang menyatakan kenapa konstruksi for dalam C lebih tepat jika dimasukkan ke dalam kategori perulangan kondisional. Tapi pada kenyataannya memang konstruksi for ini disediakan C untuk men-simulasikan konsep perulangan tak kondisional.

Sujud Dermawan

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.

0 comments: