Reza Primardiansyah wrote:

> Aku tau itu metaprogramming stuff, tapi apa gunanya di
> program tsb? apa yg haruskan itu ada ? apa efeknya
> kalo tanpa class<<self

class << self itu jargon ruby, pak.

Berikut adalah inti sari yang saya ambil dari referensi buku tulisannya Mas Hal
Fulton, yg judulnya [Ruby Way 2nd Edition, Terbitan Addison
Wesley](http://amazon.com "Belinya disini OR pas ketemu Hal di mars dihajar").

Disini saya pakai bahasa Indonesia saja ya, buat yang ingin bahasa Inggris
langsung bisa merujuk ke panduan buku aslinya (baca sendiri).

Istilah singleton kadang terlalu sering digunakan. Singleton berguna untuk
mengingat kata dalam bahasa Inggris yang baik pada rujukan ke "sesuatu" siapa 
saja
yang unik. Sepanjang kita dapat menggunakannya sebagai modifier, seharusnya 
tidak
perlu bingung.

Pattern (Pola?) singleton merupakan design pattern yang sudah terkenal dimana 
ada
kelas yang membolehkan dirinya diinstansiasi sekali saja, jadi library singleton
di Ruby mengimplementasikan pattern model begini.

Kelas singleton di Ruby seperti entitas kelas dimana metode-metode yang disimpan
itu per-obyek bukan per-kelas. Jadi kalau ada yang bilang kelas singleton
merupakan "true class" itu juga masih diperdebatkan. Berikut adalah contoh
bagaimana membuka kelas singleton untuk obyek string dan menambahkan metode (ke
string tersebut).

str = 'arie_kangen_pak_reza'
class << str
   def hyphenated
     self.split(//).join("-")
   end
end

nah lalu kita tambahkan metodenya ke str ya:

str.hyphenated
=> "a-r-i-e-_-k-a-n-g-e-n-_-p-a-k-_-r-e-z-a"

sebagian orang mulai menggunakan istilah eigenclass dalam hal ini, diturunkan 
dari
eigen dalam bahasa Jerman yang berarti "its own" (or punya si anu sendiri?) dan
juga dihubungkan dengan istilah dari matematika dan fisika seperti eigenvalue.
Istilah yang cerdik, tetapi istilah "eigenclass" ini tidak digunakan di seluruh
komunitas, dan bahkan sebagian orang benci istilah tsb.

Mari kita kembali ke contoh tadi. Karena metode hyphenated ada di dalam obyek 
yang
tidak ada atau kelas, maka metode hyphenated tersebut merupakan metode singleton
di dalam obyek tersebut. Ini istilah yang tidak ambigu, bukan? Kadang ada obyek
dirinya sendiri disebut singleton karena obyek tersebut merupakan satu-satunya
obyek yang memiliki metode itu juga.

Tetapi ingatlah bahwa di Ruby, kelas sendiri pun juga merupakan obyek Maka kita
bisa menambahkan metode pada kelas miliknya kelas singleton, dan metode tersebut
sifatnya akan unik pada obyek ybs, yang mana obyek tersebut merupakan kelas.
Contohnya begini:

class KelasSaya
  class << self
   def halo # ini cara lain, kalo ariekeren pingin gini bisa juga: def self.halo
    puts "Halo dari #{self}!"
   end
  end
end

atau bisa juga selain self.halo bisa juga gini: KelasSaya.halo
itu sama singleton juga.

Jadi kita tidak perlu membuat obyek instan KelasSaya untuk memanggil metode 
halo.

Nah, setelah saya panjang lebar cerita gini, pak, pasti pak reza bakal tercenung
lalu merenung hingga akhirnya terbangun.... yang saya bahas barusan tadi contoh
itu kan ya metode kelas di Ruby juga.

Ternyata ujung-ujungnya panjang-panjang arie ngomong ya senada juga sama yang
Yohanes ceritakan dengan codes itu :-D Gimana? buat Rubyist lainnya kalau ada 
yang
kesulitan atau malah tambah bingung, harus posting ya.. supaya ilmunya selain
ngendap juga langsung sekalian "learning by doing" = belajar langsung dengan
dipraktekkan. Kita situs resmi sudah ada, dokumentasi sudah tinggal enak, jadi
kalau dari level tim ruby-lang internasional tinggal diadakan feedback, kalau 
ada
kesulitan atau malah jadi bingung tinggal bilang.

Tinggal habis gitu kita bahas soal fitur Fiber nih ya? Atau soal kapan symbol 
ruby
di GC beserta keunggulan2xnya. ;-) ini pasti Yohanes atau Ridho yang katanya 
suka
mainan Ruby 1.9 atau yang ruby di trunk svn langsung tergelitik pingin bahas, 
no?
Tapi plis jangan tanya balik ke saya pertanyaannya/masalahnya apa ya :-) soalnya
jujur saya masih belum berpikiran punya masalah sampai ke urusan sana-sana... 
gak
tau kalau sang moderator algoritma yang ada disini mau angkat bicara (Felix?),
gimana kehebatan dan kekuatan fitur Fiber di Ruby 1.9 yang gosipnya dirilis 
akhir
tahun ini bakal mendongkrak tuning algoritma kita-kita (termasuk saya) yang 
masih
di taraf merangkak belajarnya ini. (ehm ehm.. knock knock.. otherwise I'll talk
with ya directly when I'm in Singapore). Hyoweis sodara2x, salam OOT. -_-

-- 
Arie | http://www.linkedin.com/in/ariekeren
http://ariekusumaatmaja.wordpress.com | http://groups.yahoo.com/groups/id-ruby
Never say RTFM. Turn the trolls into committers (Audrey Tang, conisli-ofun.pdf)


Kirim email ke