Mengenal REBOL Dalam 10 Langkah


REBOL (Relative Expression Based Object Language) adalah bahasa pemrograman concatenative yang sangat menyenangkan. REBOL diciptakan oleh Carl Sassenrath, seorang jenius komputer yang berpendapat bahwa kekuatan pemrograman terletak pada bahasanya. Dengan bahasa yang tepat, maka produktivitas akan meningkat secara signifikan dibandingkan dengan teknologi software tradisional.

REBOL menolak ide dan kecenderungan bahwa software masa-kini harus berukuran besar dan kompleks. REBOL adalah programming tool yang hanya terdiri dari 1 buah file saja. Dan ukurannya hanya kisaran 1 MB saja. Hanya perlu beberapa detik saja untuk mengunduhnya dan tidak memerlukan library apapun. File aplikasi REBOL hanya berukuran satuan hingga puluhan kilobyte saja.

Namun demikian, REBOL memiliki fitur dan fasilitas yang tidak main-main. REBOL dipersenjatai dengan ratusan fungsi siap-pakai, puluhan tipe data, bantuan (help/dokumentasi) yang built-in, mendukung berbagai protokol komunikasi, memiliki dialek khusus untuk pemrograman grafis dan masih banyak lagi. Selengkapnya, Anda bisa mengeksplorasi situs www.rebol.com.

Selanjutnya, kita masuk pada pengenalan REBOL dalam 10 langkah. Tulisan ini bersumber dari tulisan REBOL in Ten Steps dengan penambahan dan pengurangan dari saya pribadi dengan maksud agar lebih mudah dipahami.

 

1. Values

Values atau nilai adalah data mentah dari REBOL. Dan REBOL menawarkan banyak sekali tipe data. Ada 2 lusin lebih tipe data yang disediakan REBOL.

Berbagai macam nilai dapat ditulis langsung di REBOL. Tidak diperlukan “konstruktor” khusus. Anda cukup menuliskan nilai-nilai apa adanya, sesuai format yang dimengerti REBOL.

REBOL berusaha untuk menggunakan format-format yang biasa kita gunakan untuk mendefinisikan nilai-nilai. Ini membuat skrip lebih mudah dibaca. Dan seperti yang akan Anda lihat di bawah, REBOL menerima lebih dari satu format untuk beberapa nilai guna memungkinkan variasi atau standar internasional.

Berikut adalah beberapa contoh dari berbagai nilai (tipe data) dari REBOL. Perhatikan di bawah ini bahwa komentar dalam REBOL dimulai dengan titik koma (;).

Numbers / Angka

1234 -432 3,1415 1,23E12 
0,01 1,2E12 ; format desimal non-British

Times / Waktu

12:34 20:05:32 0:25.34

Dates / Tanggal

20-Apr-1998 20/Apr/1998 20-4-1998 1998-4-20 
20-Apr-1998/12:32 ; tanggal dengan waktu 
20-Apr-1998/12:32-8:00 ; tanggal dengan waktu & zona waktu

Money / Uang

$12,34 USD$12,34 CAD$123,45 DEM$1234,56

Tuples

3.1.5 ; nomor versi 
255.255.0 ; digunakan untuk warna 
199.4.80.7 ; Alamat IP

Pairs / Pasangan

5x10 100x100 -50x-25

String

"Ini adalah string" 
{Ini adalah cara lain untuk menulis 
string yang mencakup banyak baris 
dan berisi string "dengan tanda kutip".}

Tag

<title> 
<h1> 
</ h1> 
<a href="example.html">

E-mail

info@rebol.com 
pres-bill@oval.whitehouse.gov

URL

http://www.rebol.com ; situs web 
ftp://ftp.rebol.com/sendmail.r ; transfer file 
mailto: info@rebol.com ; format lain email

File

%data.txt 
%gambar/photo.jpg 
%../skrip/*.r

Issues

#707-467-8000 ; nomor telepon 
#0000-1234-5678-9999 ; nomor kartu kredit 
#MFG-932-741-A ; nomor model

Binary / Data Biner

#{0A6B14728C4DBEF5} ; hex encoded 
64#{45kLKJOIU8439LKJklj} ; base-64 encoded

 

2. Words (Kata-kata)

Words adalah simbol dalam REBOL. Words digunakan untuk mewakili sesuatu secara langsung sebagai sebuah kata, atau secara tidak langsung sebagai variabel.

Kata-kata dapat ditulis dengan cara yang sama seperti yang biasa kita lakukan seperti halnya bahasa sehari-hari, contoh:

Show next image
Send the-file to chandra@mail.com
Putar servo kanan 40
Kirim serial1 perintah1
nama alamat alamat-email nomor-hp

Tanda hubung dan beberapa karakter khusus lainnya juga dapat digunakan. Mereka dianggap menjadi bagian dari kata (word). Di bawah ini adalah contoh kata-kata dalam REBOL:

number? time? date! 
image-files connection-time file-size 
++ - == + - ***** *new-line* left&right

Akhir kata ditandai dengan spasi, baris baru, atau salah satu karakter:

[] () {} " : ; /

Juga, karakter-karakter ini tidak dapat muncul dalam kata-kata:

/ @ # $ % ^ ,

Catatan KhususKarena REBOL memiliki begitu banyak tipe data bawaan, adanya spasi diantara kata dan nilai adalah sebuah keharusan. Misalnya, kita diharuskan menulis:

a + 10

dan  tidak boleh:

a+10

Jika Anda mendapatkan kesalahan sintaks, kurangnya spasi mungkin menjadi alasannya.

3. Block (Blok)

Nilai dan kata-kata dikelompokkan bersama dalam blok . Blok dimulai dengan ‘[‘ dan berakhir dengan ‘]’. Kita dapat mengatur nilai dan kata dalam urutan apa pun dan dalam jumlah baris berapapun yang kita inginkan. REBOL memungkinkan format bebas dalam blok untuk membuat database, direktori, tabel, set, urutan, kode, fungsi, dll.

[putih merah hijau biru kuning oranye hitam] 

["Spielberg" "Back To The Future" 1:56:20 MCA] 

[ 
    "Bill" billg@ms.com #315-555-1234 
    "Steve" jobs@apl.com #408-555-4321 
    "Ted" ted@gw2.com #213-555-1010 
] 

[ 
    "John" 6894 0:55:68 
    "Dion" 68861 0:61:35 
    "Floyd" 46001 0:50:12 
]

Blok biasanya digunakan untuk kode dan juga untuk data:

if time > 10:30 [send jim news] 

loop 100 [print/only "*"] 

situs: [ 
    http://www.rebol.com [save %reb.html data] 
    http://www.cnn.com [print data] 
    ftp://www.amiga.com [send cs@org.foo data] 
] 

foreach [situs aksi] situs [ 
    data: read situs 
    do aksi 
]

4. Evaluation (Evaluasi)

Blok dapat dievaluasi untuk mengomputasi hasilnya. Nilai dan kata-kata blok tersebut dikomputasi dari kiri ke kanan. Contoh di bawah ini menunjukkan bagaimana ini bekerja seolah-olah Anda mengetikkan ke REBOL saat diminta. (Baris yang diketik pada prompt akan membentuk sebuah blok, meskipun tanda kurung [] tidak ditampilkan) :

print "Hello REBOL"
Hello REBOL
send friend@rebol.com "Hello REBOL"

color: [red green blue]
pick color 3
blue
loop 10 [prin "*"]      ;(not a typo, see manual)
**********
if today = 6-Jun-1999 [
    send friend@rebol.com "Happy 40th birthday"
]

loop 20 [
    wait 8:00
    send friend@rebol.com read http://www.cnn.com
]

repeat count 3 [print ["count:" count]]
count: 1
count: 2
count: 3

Tanda kurung dapat digunakan untuk mengelompokkan urutan evaluasi:

(2 + 3) * (10 - 5)
25
(length? "Perahu") + 2
8

5. Variable (Variabel)

Kata-kata dapat digunakan sebagai variabel untuk menyimpan nilai. Sebuah kata yang diikuti dengan karakter titik-dua (:) akan menetapkan nilainya, contoh:

umur: 22 
tea-time: 15:32 
birth-day: 20-Mar-1997 
friends: ["John" "Paul" "George"]

Kata-kata tanpa tanda titik-dua akan dievaluasi oleh REBOL, contoh:

print usia
22
if current-time > tea-time [print tea-time]
15:32
print third friends
George

Variabel dapat digunakan untuk menyimpan semua jenis nilai . Dalam contoh di atas, kata-kata print , if , >, third adalah variabel yang memiliki fungsi. Kata-kata tersebut merupakan bawaan (telah ditetapkan oleh) REBOL.

Variabel hanya memiliki makna dalam konteks di mana mereka didefinisikan. Suatu konteks dapat menjangkau seluruh program atau dibatasi pada blok, objek, atau fungsi tertentu. Dalam contoh di bawah ini, fungsi use membuat kata age lokal ke blok yang mengikuti. age adalah variabel lokal . Di luar blok itu mungkin memiliki nilai lain, tetapi itu tidak akan mempengaruhi nilai age di dalam blok

use [age] [
    age: "young"
    print age
]

Variabel lokal juga dibuat oleh fungsi, seperti yang akan dijelaskan di bagian selanjutnya.

6. Functions (Fungsi)

Sebuah fungsi adalah sebuah blok yang memiliki variabel lokal yang diberikan nilai-nilai baru setiap kali blok dievaluasi. Variabel lokal adalah argumen dari fungsi. Fungsi dapat dibuat dengan beberapa cara. Berikut ini yang paling umum:

sum: func [a b] [a + b]

Perintah tersebut akan menciptakan fungsi baru yang disematkan pada kata sum. Blok pertama adalah parameter fungsi dan blok kedua adalah perintah yang akan dievaluasi ketika fungsi digunakan, dalam hal ini adalah menjumlahkan 2 buah nilai dan mengembalikan hasilnya. Untuk menggunakan fungsi sum, caranya adalah sbb:

print sum 2 3
5
h: sum 34 5
print h
39

Ketika fungsi penjumlahan dipanggil, nilai a menjadi 2 dan nilai b menjadi 3. Mereka ditambahkan bersama-sama dan hasilnya dikembalikan, di mana ia kemudian diteruskan sebagai argumen ke fungsi print.

Untuk beberapa fungsi, Anda mungkin membutuhkan variabel lokal yang bukan argumen. Untuk masalah tersebut, maka digunakanlah function (fukan func) seperti yang berikut ini.

average: function [series] [total] [
    total: 0
    if zero? length? series [return 0]
    foreach value series [total: total + value]
    return total / (length? series)
]

series adalah argumen dan total adalah variabel lokal yang digunakan untuk keperluan perhitungan. Perhatikan bahwa return digunakan di dua tempat untuk mengembalikan hasil sebagai hasil dari fungsi. Setelah menemui kata return, maka otomatis program akan keluar dari fungsi tersebut.

7. Paths

Sebuah path menyatakan sebuah refinement yang mengindikasikan bahwa dibutuhkan informasi lebih lanjut. Kita sangat familiar dengan path untuk menyatakan file dan URL. Karakter / digunakan untuk memisahkan kata didalam path.

source/images/globe.jpg
http://www.rebol.com/examples/simple.r

Pada REBOL, path juga dapat digunakan untuk blocks, functions, objects, and strings, contoh:

USA/CA/Ukiah/size  ; memilih size pada block USA
match/any          ; memilih fungsi match dengan kondisi any
account/balance    ; memilih fungsi balance dari object account
names/12           ; memilih karakter ke-12 dari string names

Contoh dibawah ini menunjukkan penggunakan block sebagai mini-database yang diakses dengan path:

suppliers: [
  TELINKS [
    phone #0812-3178-4018
    site  http://teknikelektrolinks.com
    email info@teknikelektrolinks.com
  ]
  USBINOV [
    phone #0812-3178-4018
    site  http://www.usbinov.com
    email info@usbinov.com
  ]
]

print suppliers/telinks/site
http://teknikelektrolinks.com
print suppliers/usbinov/phone
0812-3178-4018

8. Objects

Object adalah kelompok variabel dan fungsi yang memiliki nilai spesifik sesuai konteksnya. Object digunakan untuk mengimplementasikan struktur data yang kompleks. Semisal, data akun bank dapat direpresentasikan dengan object yang memiliki data (atribut) dan fungsi pemanipulasinya:

account: make object! [
    name: "Johansson"
    balance: $100
    ss-number: #1234-XX-4321
    deposit:  func [amount] [balance: balance + amount]
    withdraw: func [amount] [balance: balance - amount]
]

name, balance, ss-number, deposit, dan withdraw adalah variabel yang bersifat lokal dari object account.

deposit dan withdraw adalah fungsi yang didefinisikan secara lokal di dalam object. Fungsi ini biasa disebut sebagai method. Variabel dan fungsi dapat diakses menggunakan path:

print account/balance
$100.00
account/deposit $300 ; menambah $300 ke balance

print ["Balance for" account/name "is" account/balance]
Balance for Johansson is $400.00

Untuk membuat object account baru tapi dengan nilai balance yang berbeda caranya adalah sebagai berikut:

checking-account: make account [
    balance: $2000
]

Kita juga dapat membuat sebuah account dengan penambahan variabel atau fungsi. Semisal, kita tambahkan nama bank dan tanggal pembuatan pada account baru yang kita buat.

my-account: make account [
    bank: "Bank Central Amerika"
    created: 11-12-2000
]

print my-account/balance
$2000.00
print my-account/bank
Bank Central Amerika

 

9. Messages

message adalah sebuah file teks. Message diawali dengan kata REBOL yang berisi blok data seperti nama file, tanggal pembuatan, pembuat, versi, deskripsi, dan lain-lain. Blok REBOL ini disebut juga header.

REBOL [
    Title:  "Example Header"
    Date:   1-Sep-1998
    Author: "Homer Simpson"
    Version: 1.0.0
    Purpose: "Shows an example of a REBOL header"
]

Header dapat berisi berbagai informasi tergantung dari pembuatnya, tanpa ada batasan. Mesage dapat dikirim melalui protokol-protokol internet seperti web, email, dan ftp. Kita juga dapat mengevaluasi message yang kita simpan di sebuah server dengan cara  yang sungguh mudah:

do http://teknikelektrolinks.com/dclock.r

Baris perintah di atas ini akan mengevaluasi file program REBOL dclock.r. Hasilnya adalah sebagai berikut:

Contoh berikut ini mengirimkan file dclock.r melalui email:

send test@rebol.com read http://teknikelektrolinks.com/dclock.r

 

10. Dialects (Dialek)

Dialect adalah kekuatan utama dari REBOL.

Dialect adalah blok yang mengimplementasikan sebuah topik tertentu yang bersifat unik dan secara khusus dibuat untuk digunakan dalam menyelesaikan masalah tertentu (spesifik). Dialect disebut juga DSL (Domain Specific Language), yakni semacam library yang secara khusus dibuat untuk masalah tertentu.

Contoh dialect adalah VID (Visual Interface Dialect). VID berisi konteks untuk pemrograman GUI pada REBOL. VID menyediakan berbagai macam fungsi untuk menghasilkan GUI yang baik dan tidak tergantung pada library OS tertentu. Jadi, kita bisa mendapatkan tampilan GUI yang sama persis ketika program dijalankan di Windows maupun di Linux.

Contoh lain adalah dialek PARSER yang berfungsi mem-parsing sebuah ekspresi dengan aturan-aturan tertentu.

Berikut ini adalah beberapa contoh dialek yang dapat dibuat untuk menyelesaikan permasalahan tertentu. Agar dapat dijalankan, setiap dialect membutuhkan parser yang ditulis dalam REBOL.

Berikut ini adalah contoh skrip dialect untuk kontrol studio video:

[queue tape to 0:36:35]
[roll tape]
[wait until 0:37:07]
[wipe tape to image with effect 3]
[key title-text]

Dan yang berikut ini adalah contoh skrip dialect GUI menggunakan VID:

button [200 100] style-4 [play cruse-narration]
button [*   120] style-4 [start scene 27]
window [260 100] text-80 [select window area]

Contoh lain dialect yang bisa kita buat adalah penjadwalan tim sepak bola:

[team-12 plays team-32 on saturdays at 10:00]
[team-12 must drive]
[team-32 can play any day]
[team-17 does not play on mondays]

An installer script:

Delete base-dir if earlier modification date
Create base-dir if not existing
Install %editor if newer
Install %crash-protect if on Win32 and is newer
Install %browser but never replacing existing
Switch to %threads if pre-1.2-system

Dan tentunya masih banyak dialek yang dapat dibuat dengan REBOL. Dengan dialect kita seolah memiliki bahasa khusus untuk masalah yang khusus pula. Di sinilah letak kekuatan utama dari REBOL.

Tentunya tulisan singkat ini belumlah cukup untuk mengungkap segala fitur dan kelebihan bahasa pemrograman REBOL. Jika Anda tertarik dengan bahasa REBOL, silakan download dan mencobanya secara langsung.

Situs resmi REBOL juga menyediakan dokumentasi yang sangat lengkap dan komprehensif. Tidak memerlukan buku khusus untuk mempelajari REBOL karena semuanya tersedia di situsnya.

Semoga bermanfaat.

 

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.