Anda di halaman 1dari 19

c 

Ruby adalah bahasa pemrogaman scripting yang berorientasi objek.Tujuan dari ruby adalah
menggabungkan kelebihan dari semua bahasa pemrogaman scripting yang ada di dunia.Ruby
ditulis dengan bahasa C dengan kemampuan dasar seperti Perl dan Phyton.
Ruby pertama kali dibuat oleh seorang programmer Jepang bernama Yukihiro
Matsumoto.Penulisan Ruby dimulai pada February 1993 dan pada Desember 1994 dirilis versi
alpha dari ruby.Pada awal perkembangan Ruby, Yukihiro meulis Ruby sendiri sampai pada
tahun 1996 terbentuk komunitas Ruby yang banyak mengkotribusikan Ruby.
Ruby merupakan bahasa yang seimbang. Pencipta Ruby, Yukihiro ³matz´ Matsumoto,
menggabungkan bagian-bagian dari bahasa-bahasa favorit beliau (Perl, Smalltalk, Eiffel, Ada
dan Lisp) untuk membentuk bahasa baru yang seimbang antara pemrograman fungsional dengan
pemrograman imperatif.
Matz sering menyebutkan bahwa beliau sedang ³mencoba membuat Ruby natural, bukan
sederhana,´ dengan cara membuatnya mirip dengan kehidupan nyata.
Berprinsip pada hal ini, Matz menambahkan:
Penampilan Ruby dari luar sederhana, tetapi sangat rumit di bagian dalam, seperti badan manusia
kita ini.

   

 
Sejak Ruby pertama kali dirilis ke publik pada tahun 1995, banyak programmer profesional dari
seluruh dunia serius ikut mengembangkan Ruby.Pada tahun 2006, Ruby diterima oleh banyak
orang.Dengan komunitas pengguna Ruby yang aktif di banyak kota-kota di seluruh dunia dan
konferensi-konferensi beserta pertemuan Ruby terkait.

Ruby-Talk, milis utama untuk diskusi Ruby (dalam bahasa Inggris) telah mencapai kisaran 200
email setiap hari.

TIOBE index, yang menghitung perkembangan bahasa-bahasa pemrograman, menempatkan


Ruby pada peringkat ke 10 diantara bahasa-bahasa pemrograman di seluruh dunia.Melihat pada
perkembangan ini, mereka memperkirakan, ³Kesempatan Ruby memasuki peringkat atas 10
besar adalah dalam waktu setengah tahun.´ Kebanyakan dari perkembangan Ruby beratribut
pada terkenalnya software yang ditulis dengan Ruby, terutama framework web Ruby on Rails2.

Ruby juga sepenuhnya bebas.Tidak hanya gratis, tetapi juga bebas untuk menggunakan,
memodifikasi dan mendistribusikan Ruby.

c  

 
 c      

Pertama kali, Matz melihat bahasa-bahasa lain untuk mencari sintaks yang ideal.Terkenang
pencariannya, Matz berkata, ³Saya mau bahasa scripting yang lebih hebat daripada Perl dan
lebih berorientasi obyek daripada Python3.´

Di Ruby, semua adalah obyek. Setiap informasi dan kode bisa diberi property dan action.
Pemrograman berorientasi obyek memanggil property dengan nama=    dan action,
yang disebut sebagai
 . Pendekatan murni berorientasi obyek terutama terlihat pada
demonstrasi sedikit kode yang diberikan pada number.

5.times { print "Kami *cinta* Ruby -- Ruby sungguh aduhai!" }

Di banyak bahasa-bahasa lain, number dan tipe primitif bukan obyek.Ruby mengikuti pengaruh
bahasa Smalltalk dengan memberikan metode dan variabel instan pada semua tipe.Ini
memudahkan menggunakan Ruby, karena peraturan-peraturan mengenai obyek semua berlaku
pada Ruby.

  

Ruby dianggap sebagai bahasa yang fleksibel, karena bagian-bagian dari Ruby bisa diubah-ubah
dengan bebas.Bagian-bagian yang esensi di Ruby bisa dihapus maupun didefinisikan
ulang.Bagian-bagian yang sudah ada bisa ditambahkan.Ruby mencoba untuk tidak membatasi
programmer.

Misalnya, penambahan dilakukan dengan operator plus (ü). Tetapi, jika Anda ingin
menggunakan kata plus yang lebih mudah dibaca, maka Anda dapat menambahkan metode
tersebut pada kelas builtin Numeric.

class Numeric
def plus(x)
self.ü(x)
end
end
y = 5.plus 6
# y sekarang adalah 11

Demi kemudahan, operator-operator Ruby adalah juga metode.Anda juga bisa mendefinisikan
ulang operator.

( 

 

Blok Ruby juga dianggap sebagai sumber kekuatan Ruby yang sangat fleksibel.Programmer
dapat menyertakan closure pada setiap metode, menjelaskan bagaimana metode yang
bersangkutan seharusnya berperilaku. Closure disebut  dan telah menjadi satu diantara
banyak fitur-fitur Ruby yang paling populer pada banyak pendatang baru Ruby dari bahasa-
bahasa imperatif lain seperti PHP atau Visual Basic.

Blok terinspirasi dari bahasa-bahasa fungsional. Matz berkata, ³Saya ingin menghormati kultur
Lisp di closure Ruby4.´

search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." ü engine.downcase ü ".com"
end

Pada kode diatas, blok dijelaskan dalam bentuk do ... end. Metode map memberlakukan blok
agar menerima array kata-kata (Google, Yahoo dan MSN). Banyak metode-metode lain di Ruby
dibiarkan mempunyai hole yang dibuka untuk programmer agar menulis blok mereka sendiri
untuk mengisi dengan lebih lengkap apa saja yang seharusnya sebuah metode lakukan.





Tidak seperti banyak bahasa-bahasa berorientasi obyek lain, Ruby hanya menyediakan single
inheritance 


. Tetapi Ruby mengetahui konsep module (disebut sebagai
Categories di Objective-C).Module merupakan kumpulan dari metode-metode.

Kelas dapat me-mixin (menggabungkan) sebuah module dan menerima semua metode-metode
(dari module yang bersangkutan) dengan bebas.Contoh, setiap kelas yang mengimplementasikan
metode each bisa mixin module Enumerable, yang menambahkan banyak metode-metode yang
menggunakan each untuk melakukan perulangan.

class MyArray
include Enumerable
end

Secara umum, Rubyist menganggap ini sebagai cara yang lebih jelas ketimbang multiple
inheritance, yang rumit dan bahkan terlalu membatasi.


    
Ruby jarang menggunakan tanda baca dan biasanya cenderung menggunakan keyword berbahasa
Inggris, biasanya beberapa tanda baca digunakan untuk memperjelas kode Ruby

Ruby tidak perlu deklarasi variabel.Ruby menggunakan aturan penamaan yang mudah untuk
menyatakan scope suatu variabel.

„Y =ar adalah variabel lokal.


„Y U=ar adalah variabel instan.
„Y l=ar adalah variabel global.

Sigil-sigil tersebut bertujuan untuk memudahkan dan memperjelas ketika dibaca bagi
programmer untuk mengidentifikasi fungsi dari setiap variabel.Sigil juga bisa menjadi hal yang
tidak perlu bila harus digunakan pada setiap member instan self.

v
c 
 


Ruby kaya fitur, antara lain sebagai berikut:

„Y Ruby memiliki fitur-fitur yang menangani exception, seperti Java atau Python, untuk
mempermudah menangani error.

„Y Ruby menyediakan mark-and-sweep garbage collector untuk semua obyek Ruby. Tidak
perlu me-maintain reference count pada library extension. Seperti yang Matz katakan,
³Ini lebih baik untuk kesehatan Anda.´

„Y Menulis extension C di Ruby lebih mudah daripada di Perl ataupun di Python, dengan
API yang elegan untuk memanggil Ruby dari C. Ini termasuk memanggil Ruby
embedded di software, untuk digunakan sebagai bahasa scripting. Interface SWIG juga
tersedia.

„Y Ruby bisa load library extension secara dinamis jika Sistem Operasi mengijinkan.

„Y Ruby menyediakan fitur OS threading yang independent. Maka, untuk semua platform
dimana Ruby berjalan, Anda juga punya multithreading, terlepas dari apakah Sistem
Operasi mendukung multithreading atau tidak, bahkan pada MS-DOS sekalipun!

„Y Ruby sangat portable: Ruby kebanyakan dikembangkan di GNU/Linux, tetapi juga


berjalan di banyak tipe UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS,
BeOS, OS/2, dan lain-lain.

 ! 




"
  # 
 
Berikut adalah beberapa penjelasan dan petunjuk pada fitur-fitur utama Ruby yang akan Anda
lihat ketika sedang mempelajari Ruby.
È 


Dua fitur Ruby yang mungkin belum biasa Anda lihat sebelumnya adalah ³blok´ dan
iterator.Daripada melakukan perulangan dengan indeks (seperti C, C++ ataupun Java sebelum
versi 1.5), atau melakukan perulangan lewat  (seperti for (Ua) {...} di Perl ataupun for i
in aList: ... di Python). Anda akan
 
melihat kode yang mirip seperti ini di
Ruby:

daftar_orang.each do |orang_ini|
# Kita berada dalam blok
# Kita sedang berurusan dengan orang_ini
# orang_ini disebut parameter blok
puts orang_ini.nama
end

Untuk info lebih lanjut tentang each (dan teman-temannya seperti collect, find, inject, sort,
dan lain-lain.), lihat ri Enumerable (kemudian ri Enumerable#Ä ).

c   
$

Tidak ada perbedaan antara ekspresi dan pernyataan.Semua punya =  (nilai), bahkan jika
=  tersebut adalah
 (maksudnya, nil juga tetap punya = ). Ini karena:

x = 10
y = 11
z = if x < y
true
else
false
end
z # => true

c ( 
c


Banyak Rubyist pemula berjuang keras memahami apa itu Symbol dan untuk apa Symbol itu
ada.

Symbol dapat dijelaskan sebagai identitas. Symbol merupakan sebuah hal tentang  ini,
bukan  ini. Buka irb dan perhatikan perbedaan berikut ini:

irb(main):001:0> :joko.object_id == :joko.object_id


=> true
irb(main):002:0> "joko".object_id == "joko".object_id
=> false
irb(main):003:0>

Metode object_id mengembalikan identitas dari sebuah Object. Jika ada dua obyek memiliki
object_id yang sama, maka mereka sebenarnya adalah obyek yang sama (menunjuk ke Object
yang sama di memori).
Seperti yang dapat Anda lihat, sekali Anda pernah menggunakan Symbol, setiap Symbol dengan
karakter yang sama menunjuk ke Object yang sama di

. Untuk setiap dua Symbol yang
merepresentasikan karakter yang sama, maka object_id cocok.

Sekarang perhatikan String (³joko´).object_id tidak cocok. Artinya dua obyek tersebut
menunjuk ke dua obyek yang berbeda di memori, meskipun isi kedua obyek String tersebut
sama persis. Kapanpun Anda menggunakan String baru, Ruby selalu mengalokasikan memory
untuk string baru tersebut.

Jika Anda ragu-ragu apakah menggunakan Symbol atau String, pertimbangkanlah apa saja yang
lebih penting: identitas obyek (contoh: key Hash), atau isi (seperti contoh di atas, ³joko´).

c    

³Semua adalah obyek´ bukan sekedar hiperbola. Bahkan kelas (ilass) dan integer juga obyek,
dan Anda dapat melakukan hal yang sama seperti perlakuan Anda terhadap obyek-obyek lain:

# Ini sama saja dengan


# class KelasSaya
# attr_accessor :=ariabel_instan
# end
KelasSaya = ilass.new do
attr_accessor :=ariabel_instan
end

]



Konstanta bisa diubah. Jika Anda mengubah konstanta yang sudah diinisialisasi, maka akan
menyebabkan ° , tetapi tidak sampai menghentikan program Anda. Jadi maksudnya Anda
  
 tidak mendefinisikan ulang konstanta.


 




Ruby memiliki pengaturan penamaan.Jika sebuah    diawali dengan huruf kapital, maka
   tersebut merupakan konstanta.Jika    diawali dengan tanda dolar ($), maka
   tersebut adalah variabel global.Jika identifier diawali dengan tanda U, maka identifier
tersebut adalah  =  .Jika identifier diawali dengan UU, maka identifier tersebut
adalah variabel kelas.

Tetapi, nama-nama metode boleh diawali dengan huruf kapital. Ini bisa membingungkan, seperti
ditunjukkan pada contoh berikut:

Konstanta = 10
def Konstanta
11
end

Sekarang Konstanta adalah 10, tetapi Konstanta() adalah 11.


 ] %  

Ruby tidak memiliki °   


  atau parameter bernama, seperti Python. Tetapi, ini
bisa dimanipulasi ( ) dengan cara menggunakan 
  dan  . Ruby on Rails, satu
diantara banyak aplikasi yang dibuat dengan Ruby, banyak menggunakan trik ini. Contoh:

def keluarkan( params )


params
end

keluarkan( :param_satu => 10, :param_dua => 42 )

# => {:param_satu=>10, :param_dua=>42}

Ini dikarenakan Ruby otomatis mengubah parameter yang diberikan tersebut menjadi bentuk
hash. (meskipun pemanggilannya tanpa menggunakan kurung kurawal yang merupakan sintaks
hash)

$  &
' 

Di Ruby, semua (kecuali


 dan  ) dianggap true. Di C, Python dan banyak bahasa lain, 0
dan mungkin juga nilai-nilai lain, seperti list yang kosong, dianggap false. Perhatikan kode
Python berikut (contoh berikut juga berguna untuk bahasa-bahasa lain):

# di Python
if 0:
print "0 is true"
else:
print "0 is false"

Ini akan print ³0 is false´. Kode yang sama di Ruby:

# di Ruby
if 0
puts "0 is true"
else
puts "0 is false"
end

Print ³0 is true´.

_  (  c_c 

Pada kode Ruby berikut ini,

class KelasSaya
pri=ate
def metode; true; end
def metode_lain; false; end
end
Anda mungkin berharap metode_lain adalah public.Tetapi tidak demikian._

pri=ate bersambung terus sampai akhir  , atau sampai 


 lain
muncul, apapun yang muncul lebih awal. Secara default, metode bersifat public:

class KelasSaya
# Sekarang metode adalah public
def metode; true; end

pri=ate

# metode_lain adalah pri=ate


def metode_lain; false; end
end
public, pri=ate dan protected benar-benar merupakan metode, sehingga mereka bisa
menerima parameter. Jika Anda melewatkan Symbol pada satu dari parameter, maka = 
metode diubah.

_   

Di Java, public berarti metode bisa diakses oleh siapa saja. protected berarti   kelas,
  dari kelas-kelas turunan, dan   dari kelas-kelas package yang sama dapat
mengakses, tetapi tidak untuk yang lain, dan pri=ate berarti tidak ada yang dapat mengakses
metode kecuali   kelas.

Di Ruby, public secara natural adalah public. pri=ate berarti metode hanya bisa diakses
ketika metode bisa dipanggil tanpa obyek penerima yang eksplisit. Hanya   yang boleh
menjadi receiver pemanggilan metode private.

protected perlu diperhatikan lebih lanjut. Metode protected bisa dipanggil dari kelas ataupun
  kelas turunan, tetapi juga dengan   lain sebagai penerima.

Contoh, diadaptasi dari Ruby FAQ:

l irb
irb(main):001:0> class Test
irb(main):002:1> # metode berikut secara default adalah public
irb(main):003:1* def func
irb(main):004:2> 99
irb(main):005:2> end
irb(main):006:1>
irb(main):007:1* def ==(other)
irb(main):008:2> func == other.func
irb(main):009:2> end
irb(main):010:1> end
=> nil
irb(main):011:0>
irb(main):012:0* t1 = Test.new
=> #<Test:0x34ab50>
irb(main):013:0> t2 = Test.new
=> #<Test:0x342784>
irb(main):014:0> t1 == t2
=> true
irb(main):015:0> # sekarang atur `func` menjadi protected,
irb(main):016:0* # masih jalan karena protected bisa reference ke lain
irb(main):017:0* class Test
irb(main):018:1> protected :func
irb(main):019:1> end
=> Test
irb(main):020:0> t1 == t2
=> true
irb(main):021:0> # sekarang atur `func` menjadi pri=ate
irb(main):022:0* class Test
irb(main):023:1> pri=ate :func
irb(main):024:1> end
=> Test
irb(main):025:0> t1 == t2
NoMethodError: pri=ate method `func' called for #<Test:0x342784>
from (irb):8:in `=='
from (irb):25
from :0
irb(main):026:0>

] (   

Kelas Ruby bersifat terbuka.Anda bisa membuka ilass, lalu menambahkan ke dalam ilass,
dan menggantinya kapan saja.Bahkan kelas yang termasuk class inti, seperti kelas Fixnum atau
bahkan kelas Object, induk dari semua obyek di Ruby.Ruby on Rails mendefinisikan banyak
metode yang berhubungan dengan waktu ke dalam kelas Fixnum. Perhatikan kode berikut:

class Fixnum
def hours
self * 3600 # total detik dalam satu jam adalah 3600
end
alias hour hours
end

# 14 hours from 00:00 January 1st


# jadi 14 jam dari jam 00:00 pada tanggal 1 Januari
Time.mktime(2007, 01, 01) ü 14.hours # => Sun Jan 01 14:00:00

$  # 





Di Ruby, metode boleh diakhiri dengan tanda tanya ataupun tanda seru. Pengaturan nama adalah,
metode-metode yang menjawab pertanyaan (seperti Array#empty? mengembalikan nilai 
jika obyek penerima yaitu Array ternyata kosong) diakhiri dengan tanda tanya. Kemudian,
metode-metode yang berpotensi untuk ³membahayakan´ (seperti metode yang mengganti  
atau argumen, exit! dan lain sebagainya) maka pengaturannya diakhiri dengan tanda seru.

Tetapi, semua metode yang mengganti argument tidak diakhiri dengan tanda
seru.Array#replace mengganti isi array dengan isi array lain. Karena tidak masuk akal kalau
ada metode sedemikian rupa  mengganti self.
  c
 


Metode   merupakan metode-metode yang basisnya per obyek.  hanya tersedia
pada obyek yang Anda definisikan, jadi metode tersebut tidak tersedia pada obyek-obyek yang
lain dari kelas yang sama.

class Mobil
def inspect
"Mobil murah"
end
end

porsche = Mobil.new
porsche.inspect # => Mobil murah
def porsche.inspect
"Mobil mahal"
end

porsche.inspect # => Mobil mahal

# Sementara obyek-obyek yang lain tidak terpengaruh


mobil_lain = Mobil.new
mobil_lain.inspect # => Mobil murah

   (


Ruby tidak menyerah kalau Ruby tidak mendapatkan metode yang bisa menanggapi
 
tertentu. Ruby akan memanggil metode method_missing dengan nama metode yang Ruby tidak
ditemukan beserta daftar parameternya. Secara   , method_missing membangkitkan
  NameError, tetapi Anda bisa mendefinisikan ulang Exception tersebut supaya lebih
sesuai dengan aplikasi yang Anda buat, dan banyak   yang melakukan hal yang sama.
Contoh:

# id adalah nama metode yang dipanggil,


# sintaks * mengumpulkan semua arguments
# dalam array yang bernama 'arguments'
def method_missing( id, *arguments )
puts "Metode #{id} telah dipanggil, " ü
"tetapi tidak ditemukan. " ü
"Metode ini punya arguments sebagai berikut: " ü
arguments.join(", ")
end

__ :a, :b, 10

# => Metode __ telah dipanggil, tetapi metode __


# tidak berhasil ditemukan. Metode tersebut
# memiliki argument sebagai berikut: a, b, 10

Kode diatas hanya print detil tentang pemanggilan (call), tetapi Anda bisa dengan bebas
menangani message dengan cara ini.
  %
  ( 
 





Pemanggilan metode adalah sungguh-sungguh merupakan   ke obyek lain:

# Penambahan ini
1 ü 2
# adalah sama dengan penambahan ini ...
1.ü(2)
# juga sebetulnya sama dengan penambahan ini :
1.send "ü", 2

((# 
c   

Blok ( ) banyak digunakan oleh   Ruby standar. Untuk memanggil blok, Anda bisa
menggunakan yield, atau membuat sebuah obyek Proc dengan menambahkan argumen khusus
pada list argument, seperti contoh berikut:

def blok( &the_block )


# Di dalam sini, the_block adalah blok yang dilewatkan ke metode blok
the_block # return the block
end
adder = blok { |a, b| a ü b }
# adder sekarang merupakan obyek Proc
adder.class # => Proc

Anda juga dapat membuat blok diluar pemanggilan metode dengan memanggil Proc.new
dengan blok atau pemanggilan metode lambda.

Ketika dibuat metode juga merupakan Object.

method(:puts).call "puts adalah obyek!"


# => puts adalah obyek!

 c c 

Kebanyakan operator di Ruby hanyalah    .Maksudnya     adalah
penyingkatan penulisan kode.Dalam hal operator-operator itu, mereka sebenarnya hanyalah
pemanggilan metode saja, tentunya dengan peraturan tertentu supaya jenjang   tetap
dituruti. Contohnya, Anda bisa meng- =  metode + milik kelas Fixnum:

class Fixnum
# Sebenarnya Anda bisa melakukan ini,
# tetapi tolong jangan lakukan ini
def ü( other )
self - other
end
end

Anda tidak membutuhkan operatorü C++, dan seterusnya.


Anda bahkan juga bisa mempunyai akses style array jika Anda mendefinisikan metode [] dan
[]=. Untuk mendefinisikan unary + dan ± (bayangkan +1 dan -2), Anda harus mendefinisikan
metode üU dan -U.

Tetapi operator-operator dibawah ini bukan syntactic sugar. Operator-operator dibawah ini
bukan metode dan tidak dapat didefinisikan ulang:

=, .., ..., !, not, &&, and, ||, or, !=, !~, ::

Tambahan, +=, *= dan lain sebagainya hanyalah singkatan untuk =ar = =ar ü =ar_lain, =ar
= =ar * =ar_lain, dan seterusnya tidak dapat didefinisikan ulang.

  Y  Y 
Y Y
Y  Y

1. ( 
  . Ini apa artinya? Jika ada sepuluh programmer, maka akan ada dua
belas opini tentang apa itu Pemrograman Berorientasi Objek. Saya tinggalkan semua itu pada
kebijakan Anda. Dalam hal ini, Ruby menawarkan enkapsulasi data dan metode pada objek-
objek dan penurunan dari satu kelas ke kelas lain; Ruby juga ada objek polimorfisme. Tidak
seperti C++, Perl 5, dan bahasa-bahasa pemrograman lain, Ruby didesain berorientasi objek dari
awal.

2.    


(  
( 
  . Mengapa saya jadi
berlebihan?Tidak juga.Yang saya maksud dengan mengatakan bahwa Ruby merupakan Bahasa
Pemrograman Berorientasi Objek adalah semua di Ruby dianggap sebagai objek, termasuk tipe
data primitif seperti string dan integer.Sehingga kelas-kelas wrapper seperti Java tidak
diperlukan.Tambahan, bahkan konstanta pun diperlakukan sebagai objek, sehingga, misalkan,
metode yang dibangkitkan lewat konstanta numerik itu merupakan receiver.

3.   
(

. Bagi orang-orang yang sudah terbiasa dengan
bahasa-bahasa statik seperti C++ dan Java, konsep dinamis ini merupakan hal yang
signifikan.Artinya metode-metode dan variabel-variabel dapat ditambahkan dan didefinisikan
ulang pada saat runtime.Ruby menghapus segala kesulitan atas kewajiban fitur-fitur seperti
kompilasi kondisi C () ), Ruby juga memungkinkan pembuatan API otomatis. Ini
menjadikan program-program lebih ³mengerti´²Ruby memungkinkan program mengetahui
informasi tipe saat runtime, mampu mendeteksi metode yang terlewat (tambahan penerjemah,
metode yang tidak didefinisikan sebelumnya ataupun terlewati), dan sebagainya. Dengan
perilaku ini Ruby erat kaitannya dengan Lisp dan Smalltalk.

4.   
 
   . Bahasan mengenai bahasa interpreted ini memang
masalah kompleks dan layak dikomentari. Bahasa interpreted sering diperdebatkan karena
memiliki masalah negatif tentang performance. Saya menjawab argumen negatif tersebut dengan
observasi sebagai berikut: —
, dan yang paling penting: Proses Pengembangan yang sangat
cepat merupakan hal menguntungkan, ini dipicu oleh bahasa Ruby yang alami interpreted.
  , sebetulnya seberapa lambatkah yang dinamakan terlalu lambat?Apakah Anda sudah
melakukan benchmark sebelum Anda berkata kalau Ruby itu lambat.  , Walau beberapa
orang akan mengkritik saya, saya tetap akan mengatakan ini: prosesor-prosesor komputer setiap
tahun berkembang semakin cepat. 
 , jika Anda benar-benar membutuhkan kecepatan,
Anda dapat menulis sebagian kode program Anda dalam bahasa C. 
, terakhir dan ini
merupakan hal yang diperdebatkan, karena tidak ada bahasa yang yang secara permanen
interpreted. Tidak ada aturan di dunia ini yang mengatakan bahwa Ruby compiler tidak dapat
ditulis.

5. 
 . Kemampuan UNIX akan   dan   atau melakukan operasi cari-
dan-ganti dengan ' sudah dikenal sejak bertahun-tahun. Perl banyak membantu perubahan
tersebut, begitu pula dengan Ruby.Banyak orang yang mengetahui kehebatan teknik string
tingkat mahir dan manipulasi teks.Untuk yang ragu-ragu silakan pergi dan baca buku Jeffrey
Friedl yang berjudul Mastering Regular Expressions. Jadi seharusnya tidak akan ada lagi yang
ragu-ragu.

6.  

 
. Ruby bisa dijalankan di Linux dan varian-varian
UNIX lainnya, di Windows, BeOS, dan bahkan di MS-DOS.Kalau tidak salah ingat, bahkan
Ruby juga tersedia untuk platform Amiga.

7. (     
  . Apakah ini baik?Diluar dunia tulis-menulis,
ya. Isaac Newton pernah berkata, ³Jika saya sudah melihat yang lain melakukan hal yang lebih
jauh, itu karena saya berdiri di atas pundak para raksasa.´ Jelas Ruby berdiri di atas pundak
raksasa.Ruby meminjam fitur-fitur dari Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell, dan lain-
lain. Hal yang prinsip, yang saya lihat di saat kerja adalah: —
, Jangan menjadi penemu
akan hal-hal yang sudah ada (jangan reinvent the wheel).   , Jangan perbaiki hal-hal yang
tidak rusak.  , terakhir dan ini yang spesial, gunakan keahlian-keahlian yang sudah ada pada
orang-orang.Anda sudah mengerti operasi file dan pipe di UNIX?Bagus, Anda bisa
menggunakan keahlian tersebut.Anda telah menghabiskan waktu Anda selama 2 tahun
mempelajari semua hal tentang 
?Jangan khawatir, Anda bisa menggunakan 
.Anda
mengerti Regexp di Perl?Bagus, berarti sebetulnya Anda hampir sudah belajar Ruby.

8.   




'. Apakah poin 8 ini berlawanan dengan poin ke 7
diatas?Sebagian, ya.Setiap koin mempunyai dua sisi. Beberapa fitur Ruby benar-benar inovatif,
seperti konsep mix-in yang sangat berguna. Mungkin beberapa fitur tersebut dipinjam dari
bahasa-bahasa masa depan (
: Seorang pembaca telah menunjukkan kepada saya bahwa
LISP punya mix-in paling tidak sejak tahun 1979. Bukan berarti saya tidak peduli akan argumen
saya, tapi saya akan menemukan contoh yang lebih baik dan membuat Anda yakin bahwa Ruby
dikembangkan dengan inovatif.)

9.   
(v
c

* + !v ' v
 ,.
Penggunaan terminologi o=   ini memang diperdebatkan, karena
terminologi tersebut tidak digunakan secara luas sehingga menjadi bahan perdebatan daripada
konsep Pemrograman Berorientasi Objek sendiri.Ketika saya mengatakan ini, yang saya maksud
adalah Ruby mampu menangani struktur data kompleks dan operasi kompleks dengan sedikit
perintah, sesuai dengan Filosofi Usaha yang minimal (untuk mendapatkan hasil maksimal).
10.  -   

. Routines seperti  dan  adalah
mimpi buruk. Anda bahkan tidak perlu memanggil Destructor.Cukup sudah saya katakan ini.

11.   


 
. Anda jangan keliru dengan berpikir Ruby tidak sehebat
bahasa scripting.Ruby bukan mainan. Ruby merupakan bahasa yang dikembangkan secara total
yang dibuat mudah untuk melakukan operasi-operasi biasa di scripting seperti menjalan
program-program eksternal, memeriksa sumber daya (resource) sistem, menggunakan pipe,
menangkap output, dan lain sebagainya.

12.   


. Ruby dapat melakukan hal-hal seperti yang dilakukan
Kornshell dan dapat melakukan berbagai tugas seperti yang dilakukan program C. Anda dapat
menulis sepuluh baris program Ruby untuk melakukan penugasan/task, atau membuat wrapper
untuk program-program legacy? Ruby bisa. Anda ingin menulis program server web, program
CGI atau program catur? Lagi-lagi Ruby bisa melakukan itu semua.

13.    . Dengan Ruby, Anda dapat menulis aplikasi multi threaded dengan
API sederhana. Ya, bahkan di lingkungan MS-DOS.

14. ] ! 


 
  .  
!  . Anda ingin melihat kode-
kode penyusun Ruby?Silakan saja. Ingin merekomendasikan patch?.Ya silakan.Anda ingin
bergabung dengan komunitas pengguna Ruby (Rubyist) yang pintar-pintar dan saling membantu
termasuk pencipta Ruby itu sendiri?Anda bisa mendapatkan itu semua dalam nuansa Ruby.
(Tambahan penerjemah: Komunitas Rubyist Internasional dapat Anda temui di
http://groups.google.com/group/comp.lang.ruby dan Komunitas Rubyist Indonesia dapat Anda
temui di http://groups.yahoo.com/groups/id-ruby)

15.  
 . Kurva belajar Ruby itu landai, sekali Anda sudah terbiasa dengan Ruby,
maka Anda akan mulai dapat menebak bagaimana suatu hal bekerja dengan Ruby« dan tebakan
Anda sering benar. Ruby dirancang untuk mengikuti Prinsip Sedikit Kaget (Principle of Least
Astonishment).

16.   


   
. Ruby mengerti exception, seperti Java dan C++.
Dengan kata lain, ini berarti output (hasil return coding) tidak akan berantakan, hanya ada lebih
sedikit nested if (bila harus ada), lebih sedikit logika sederhana dan penanganan error yang lebih
baik.

17.   _


. Dalam Ruby, Array itu dinamis, Anda tidak
perlu mendeklarasikan seberapa besar Array sewaktu di compile, sebut saja seperti di Pascal.
Anda juga tidak perlu mengalokasikan memori buat Array seperti di C, C++ ataupun Java.Array
merupakan objek, jadi Anda tidak perlu mengatur-atur/menjaga-jaga ukuran Array, untuk
berjalan dari awal hingga akhir secara virtual adalah hal yang mustahil dilakukan seperti ketika
Anda dengan C. Anda ingin memproses array berdasarkan indeks?Berdasarkan
elemen?memproses array terbalik? mem print array? Semua itu sudah tersedia metode metode
Array nya. Anda ingin menggunakan array sebagai set, stack dan queue (antrian) ?Untuk operasi
tersebut juga sudah ada disediakan metode-metodenya.Anda ingin menggunakan array sebagai
lookup tabel?K nanti dulu, Itu  pertanyaan menjebak, Anda tidak perlu repot-repot
melakukan itu dengan array, karena kita punya hash untuk keperluan lookup tabel.

18.   
. Anda bisa menulis library eksternal dengan Ruby ataupun dengan C.
Tambahan, bahkan Anda dapat memodifikasi kelas-kelas dan objek-objek yang sudah ada pada
Ruby secara on the fly.

19. 
 
 
  
. Anda dapat memasukkan komentar dalam
kode-kode Ruby Anda yang mana tool dokumentasi Ruby dapat mengekstrak dan memanipulasi
komentar Anda.(Para penggemar literate programming bahkan berpikir bahwa hal ini merupakan
prinsip dasar yang harus ada).

20.   





!

. Suatu metode yang
menghasilkan output Boolean (walau Ruby tidak menyebutnya dengan cara demikian) biasa
diakhiri dengan tanda tanya, dan metode yang destruktif atau metode yang dapat mengubah data
biasanya diberi nama dengan tanda seru diakhir metode. Sederhana, informatif dan intuitif.
Semua konstanta, termasuk nama kelas, diawali dengan huruf kapital. Semua atribut objek
dimulai dengan tanda @ (akeong).Penggunaan tanda-tanda dan kapitalisasi ini merupakan
konsep tua dari pragmatic programmer tanpa harus membuat mata lelah dan pusing kepala.

21.   ' %. Kita diperbolehkan menggunakan identifier yang disebut
³reserved word´ sepanjang parser tidak menganggapnya ambigu. Ini benar-benar seperti
menghirup udara segar.

22. 
 . Dari sekian banyak hal, iterator memungkinkan kita untuk mem pass
blok kode ke dalam objek Anda sehingga blok tersebut dipanggil pada setiap item di objek array,
list, tree atau apa saja. Ini merupakan teknik dahsyat yang sangat baik untuk diexplorasi seluk-
beluknya.

23.   !   . Ruby meminjam konsep Perl yang menawarkan tingkat
kontrol (tingkat paranoid?) dengan variabel /c_.Terutama berguna untuk program-program
CGI yang ingin orang-orang lakukan untuk mengcrack server web.

24. 

 . Seperti Java, dan (dengan sedikit mengangguk-nganggukkan
kepala) juga dengan C++, Ruby tidak punya konsep pointer, tidak ada indirection, tidak ada
pointer aritmetik, dan tidak ada pusing kepala dengan sintaks pointer dan debug pointer. Tentu,
ini juga berarti menjadi penyebab pemrograman sistem menjadi lebih sulit, seperti mengakses
register status kontrol untuk suatu device, tapi itu tetap bisa saja dijalankan dengan library C.
(Seperti juga para programmer C turun derajat ke assembly jika diperlukan, begitu pula para
programmer Ruby bisa saja turun ke C kalau memang diharuskan!)

25.   


 . Sinonim dan alias berkaitan erat.Anda tidak bisa
mengingat yang mana 0 yang mana 
 untuk besar ataupun panjang suatu string atau
array?Ya dua-duanya memang bisa jalan. Untuk range, ada 
dan
, ada juga  dan
? Ya terserah Anda mau pakai yang mana.Anda menyebut banyak index dengan 
 , tapi
saudara kembar Anda menyebutnya 
  ? Ya memang indices ataupun indexes dua-duanya
bisa dipakai.

26.  



  . Kurung buka kurung tutup pada pemanggilan
metode biasanya bisa dihilangkan, sama juga seperti koma di antara parameter-parameter. Quote
gaya Perl juga bisa diberlakukan di array string tanpa perlu tanda quote dan koma. Keyword
return bisa dihilangkan.

27. 
 . Ruby mendukung thread, socket, limited object persistence,
program CGI, server-side executables, file DB, dan banyak lagi. Ada juga dukungan untuk Tk,
dan dukungan-dukungan lain untuk GUI.

28. 
 . Di dunia yang sempurna, kita tidak akan perlu debugger. Tapi dunia
ini tidak sempurna.

29.  

 
 . Ruby dapat digunakan seperti menggunakan
Kornshell. (Saya dipaksa untuk melaporkan bahwa Ruby tidak begitu bagus digunakan untuk
shell, walaupun begitu, saya berpendapat shell yang berbasis Ruby itu akan bagus)

30.  
. Tidak ada keyword yang boros seperti 
, 
setelah , 
setelah % seperti di Pascal. Variabel-variabel tidak perlu dideklarasikan, sebab variabel
memang tidak punya tipe. Tipe return tidak perlu ditentukan di metode. Keyword return tidak
perlu ditulis, metode akan return untuk ekspresi yang dievaluasi terakhir. Dengan kata lain, Ruby
tidak cryptic seperti C ataupun Perl.

31.    . Anda dapat dengan mudah mengatakan hal-hal seperti 1

 


32.   

  
 . Jika Anda ingin meng iterate array  dengan
mengatakan 
, Anda bisa. Jika Anda ingin mengatakan 21 daripada 12 , Anda
juga bisa. Kebanyakan operator di Ruby sebetulnya merupakan metode yang singkat, nama-
namanya intuitif dan sintaksnya nyaman.

33. 
' 
 . Kalau tidak salah, aslinya dulu pernah di SNOBOL,
tapi akhirnya dipopulerkan oleh C++.Ruby bisa saja disalahgunakan dan keliru, tapi Ruby
memang indah memiliki fitur ini. Ruby mendefinisikan versi penugasan suatu operator secara
otomatis; kalau Anda mendefinisikan +, Anda juga dapat bonus berupa +=

34.   


 
 . Siapa yang peduli dengan , 
,

?Gunakan saja (
.Akui saja, Anda selalu ingin mencari factorial dari 365.Dan
sekarang Anda bisa melakukan itu dengan mudah di Ruby.

35. 
  

. Di zaman dahulu kala, kita menggunakan ini di
BASIC dan FORTRAN.Tetapi kemudian kita belajar Pascal dan C, dan belajar betapa operator
ini seperti setan.(Kita diberitahu bahwa kita tidak mengetahui bagaimana suatu evaluasi
diselesaikan, apakah menggunakan logaritma?Iterasi?Seberapa efisien?)tetapi kemudian, apakah
kita betul-betul peduli? Jika iya, kita bisa saja menulis ulang sendiri. Tapi jika tidak, Ruby sudah
punya operator tua yang bagus ·· yang bisa Anda cinta sama seperti Anda mencintai anak Anda.
Silakan dinikmati.

36.  







 . Jika Anda ingin mencari, mengganti,
mengatur format, membatasi, interprose ataupun token, semua itu bisa Anda lakukan dengan
metode-metode Ruby yang sudah built-in. Kalau tidak ada, Anda tinggal membuatnya dengan
mudah sesuai kebutuhan.

37.   


 
 
! 
 . Sintaks dan Semantik
Ruby lebih konsisten ketimbang kebanyakan bahasa-bahasa lain. Setiap bahasa memiliki
keanehan, dan setiap peraturan punya pengecualian, tetapi Ruby memiliki lebih sedikit
pengecualian dari peraturan-peraturan daripada yang Anda harapkan.

] 
 


Sama dengan Python, di Ruby«

„Y Ada Ruby Interaktif (dinamakan irb).


„Y Anda bisa membaca dokumentasi di command line (dengan ri, setara dengan pydoc di
Python).
„Y Tidak ada karakter khusus untuk akhir baris (° biasa atau biasa kita sebut ³enter´).
„Y Isi string bisa dipisah ke banyak baris seperti string   di Python. Di Ruby hal
ini tidak membutuhkan sintaks khusus, cukup menggunakan petik tunggal atau petik
ganda seperti biasanya, tapi Anda juga bisa menggunakan   dan sintaks lain
(misalnya %q{ halo }) jika Anda suka.
„Y Buka kurung dan tutup kurung siku ([]) untuk list, buka kurung dan tutup kurung
kurawal ({}) untuk hash (istilah Ruby untuk  .)
„Y Array mempunyai fungsionalitas yang sama. Menambahkan array menghasilkan array
gabungan. Memasukkan array ke dalam array lain menghasilkan array bersarang atau
    : a3 = [ a1, a2 ]
„Y Obyek bersifat dinamis dan     .
„Y Semua adalah obyek, dan variabel hanya merupakan  ke obyek.
„Y Meskipun °  yang digunakan berbeda (Ruby menggunakan raise dan rescue),
fitur    setara dengan Python.
„Y Anda mendapatkan fitur dokumentasi dalam kode (di Ruby disebut rdoc).

  
 



Tidak seperti di Python, di Ruby«

„Y String dapat diubah isinya (


 .)
„Y Anda dapat membuat konstanta (variabel yang nilainya tidak akan diubah).
„Y Ada aturan penamaan (misalnya: nama kelas diawali dengan huruf kapital, nama variabel
lokal diawali dengan huruf kecil).
„Y Hanya ada satu jenis tipe kontainer yang berisi daftar data, yaitu Array. Array bersifat

  yaitu dapat diubah-ubah.
„Y Interpolasi string didukung menggunakan sintaks petik ganda. Interpolasi yang didukung
adalah   (misalnya ët untuk tab) dan substitusi ekspresi: "Selamat
Datang, #{nama}!" akan menghasilkan string yang juga disisipkan isi variabel nama. Di
Ruby, string berpetik tunggal (misalnya: 'halo semua') berfungsi persis seperti  °
  di Python (tanpa interpolasi.)
„Y Tidak ada kelas ³new style´ dan ³old style´. Cuma ada satu macam kelas.
„Y Anda tidak akan pernah langsung mengakses atribut. Di Ruby, semua menggunakan
pemanggilan metode. Cara praktisnya adalah dengan menggunakan attr_reader,
attr_writer, maupun attr_accessor.
„Y Buka dan tutup kurung untuk pemanggilan metode biasanya dihilangkan (opsional /
boleh dipakai boleh juga tidak).
„Y Ada public, pri=ate, dan protected untuk mengatur akses ke  

, yang
biasanya di Python diakali menggunakan aturan penamaan _seperti___ini__.
„Y Menggunakan ³mixin´, bukan
  .
„Y Anda bisa ³membuka´ sebuah kelas kapan saja untuk mengubah atau menambahkan
metode-metode ke kelas tersebut.
„Y Ruby menggunakan true, false, dan nil, sedangkan Python menggunakan True dan
False, dan None.
„Y Kalau dites logika untuk true, hanya false dan nil yang dianggap bernilai false.
Semua nilai lain dianggap true (termasuk 0, 0.0, "", dan []).
„Y Menggunakan elsif sebagai ganti elif.
„Y Menggunakan require sebagai ganti import. Cara penggunaannya sama.
„Y Penggunaan komentar biasanya   yang ingin didokumentasikan (jadi bukan di
bawahnya.) Biasa digunakan untuk menghasilkan dokumentasi secara otomatis dari
  .
„Y Ada banyak    yang bisa dapat Anda pelajari untuk melakukan hal-hal yang sering
digunakan dengan lebih cepat. Shortcut tersebut membuat Ruby menyenangkan ()
dan membuat Anda sangat produktif.

Anda mungkin juga menyukai