Menguasai Ruby dalam 20 Menit
Sekarang kita melihat lebih jelas lagi pada program baru kita, perhatikan baris yang paling pertama, dimulai dengan tanda pagar (#). Di Ruby, semua tulisan yang ada sesudah tanda pagar (#) merupakan komentar (comment) dan tidak dipedulikan (di ignore) oleh interpreter. Baris pertama file adalah hal khusus, dan untuk Sistem Operasi Unix biasanya kita menentukan bagaimana menjalankan file. Kemudian komentar selanjutnya untuk penjelasan.
Metode
say_hai
kita sudah punya trik sedikit:# Bilang Hai buat semua
def say_hai
if @names.nil?
puts "..."
elsif @names.respond_to?("each")
# @names adalah list, iterate!
@names.each do |name|
puts "Hello #{name}!"
end
else
puts "Hello #{@names}!"
end
end
Sekarang kelas memperhatikan parameter
@names
untuk menentukan pilihan. Jika parameter nil, maka print tiga dot (…). Ya karena memang tidak ada yang perlu disapa, khan?!Perulangan—a.k.a. Iteration
Jika obyek
@names
merespon metode each
, berarti obyek ini merupakan sesuatu yang bisa Anda iterate, jadi iterate lah dan sapalah orang-orang bergantian. Kemudian, jika @names
merupakan sesuatu yang lain, biarkanlah obyek ini otomatis menjadi string dan melakukan sapaan secara default.
Mari kita perhatikan iterator lebih dalam lagi:
@names.each do |name|
puts "Hello #{name}!"
end
each
merupakan metode yang menerima blok kode yang kemudian menjalankan blok kode tersebut untuk setiap elemen dalam list, dan diantarado
dan end
itulah yang dinamakan blok. Blok juga bisa berupa function anonim atau lambda
. Variabel diantara karakter pipa itu adalah parameter untuk blok tersebut.
Yang terjadi disini adalah untuk setiap entri dalam list,
name
terkait dengan elemen list, kemudian ekspresi puts "Hello #{name}!"
dijalankan dengan name tersebut.
Kebanyakan bahasa-bahasa pemrograman lain menangani list dengan menggunakan perulangan
for
, kalau di C seperti ini:for (i=0; i<total_elemen; i++)
{
lakukan_sesuatu_dengan(elemen[i]);
}
Kode diatas memang jalan, tetapi tidak begitu elegan. Anda perlu variabel
i
, untuk mencari tahu berapa panjang/total list, dan juga harus menjelaskan bagaimana menjalani perulangan lewat list tersebut. Ruby way jauh lebih elegan, semua detil disembunyikan di metode each
, semua yang perlu Anda lakukan hanyalah memberitahukan apa yang perlu dilakukan dengan elemen each. Secara internal, metode each
akan memanggil yield "Steven"
, kemudian yield "Anton"
, kemudian yield "Ridho"
, dan seterusnya.Blok, Kekuatan Ruby
Kekuatan sesungguhnya tentang blok adalah ketika berhadapan dengan yang lebih rumit ketimbang list. Selain dari berhubungan dengan list, Anda juga bisa menangani setup, teardown dan error (yang mana semua itu diluar dari sepengatahuan user)
# Bilang "sampai jumpa" buat semua
def say_bye
if @names.nil?
puts "..."
elsif @names.respond_to?("join")
# Gabung (Join) elemen list dengan koma
puts "Sampai jumpa #{@names.join(", ")}. Datang lagi ya!"
else
puts "Sampai jumpa #{@names}. Datang lagi ya!"
end
end
Metode
say_bye
tidak menggunakan each
, tetapi memeriksa apakah@names
merespon metode join
, jika Ya, maka gunakan join. Tetapi jika tidak, maka print variabel sebagai string. Metode tidak peduli terhadap typeaktual dari variabel, hanya bersandar pada metode-metode yang didukung dikenal sebagai “Duck Typing”, jadi seperti “jalannya seperti bebek dan berbunyi wek wek wek seperti bebek…”. Keuntungan dari cara duck typing ini adalah kita tidak perlu membatasi tipe-tipe variabel apa saja yang didukung. Kalau ada orang yang datang dengan kelas list baru, sepanjang obyek tersebut mengimplementasikan metode join
dengan semantik yang sama seperti list, maka semua tetap berjalan sama persis seperti yang sudah direncanakan sebelumnya.Script Ruby Mulai!
Begitulah akhir cerita kelas BosTukangSapa, akhir dari file hanya memanggil metode-metode pada kelas tersebut. Ada satu trik yang perlu diperhatikan di baris:
if __FILE__ == $0
__FILE__
adalah variabel magic yang berisi nama file saat ini. $0
adalah nama file yang dipakai ketika memulai program. Pemeriksaan ini seolah berkata “Jika file ini merupakan file utama yang digunakan …” Pemeriksaan ini dapat berguna untuk file yang digunakan sebagai library, jadi bukan untuk mengeksekusi kode, tetapi jika file digunakan sebagai executable (file yang bisa dieksekusi/execute) maka eksekusi kode tersebut.Perdalamlah Kekuatan Ruby Anda
Demikianlah tutorial mini Ruby kita. Masih banyak lagi hal-hal yang bisa dijelajahi, kontrol struktur berbeda yang Ruby tawarkan, penggunaan blok dan
yield
, module sebagai mixin, dan banyak lagi yang lain. Saya harap tutorial mini ini dapat membuat Anda untuk menjelajahi Ruby lebih lanjut.
Jika Anda ingin menjelajahi Ruby lebih lanjut, silakan ke Dokumentasi yang punya banyak link ke manual dan tutorial, semua tersedia gratis secara online.
Atau, jika Anda benar-benar ingin buku, silakan ke daftar buku (link eksternal) (dalam bahasa Inggris)
No comments:
Post a Comment