Total Tayangan Halaman

Minggu, 01 Januari 2017

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.

Tujuan dari ruby
adalah menggabungkan kelebihan dari semua bahasa-bahasa pemrograman skrip yang ada di dunia. Ruby ditulis dengan bahasa pemrograman C dengan kemampuan dasar seperti Perl dan Python.

Segi Objek Ruby
1. 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 Python.”
2. Pada Ruby, semua adalah obyek. Setiap informasi dan kode bisa diberi property dan action. Pemrograman berorientasi obyek memanggil property dengan nama variabel instan dan action, yang disebut sebagai metode. Pendekatan murni berorientasi obyek terutama terlihat pada demonstrasi sedikit kode yang diberikan pada number.
5.times { print "Kami *cinta* Ruby -- Ruby sungguh aduhai!" }
3. Dari bahasa-bahasa lain, number dan tipe primitif bukan obyek. 
Ruby mengikuti pengaruh bahasa Smalltalk dengan memberikan metode dan variabel instan pada semua tipe. Hal ini memudahkan menggunakan Ruby, karena peraturan-peraturan mengenai obyek semua berlaku pada Ruby.
Ruby Fleksibel
1. 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.
2. 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.

Blok, Fitur yang sungguh Ekspresif
1. 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 blok 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.
2. Blok terinspirasi dari bahasa-bahasa fungsional. Matz berkata, “Saya ingin menghormati kultur Lisp di closure Ruby.”
3. Pada kode diatas, blok dijelaskan dalam bentuk do ... end. Metode mapmemberlakukan 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.

Ruby dan Mixin
1. Tidak seperti banyak bahasa-bahasa berorientasi obyek lain, Ruby hanya menyediakan single inheritance dengan sengaja. Tetapi Ruby mengetahui konsep module (disebut sebagai Categories di Objective-C). Module merupakan kumpulan dari metode-metode.
2. 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.
3. Secara umum, Rubyist menganggap ini sebagai cara yang lebih jelas ketimbang multiple inheritance, yang rumit dan bahkan terlalu membatasi.

Tampilan Ruby secara Visual
1. Ruby jarang menggunakan tanda baca dan biasanya cenderung menggunakan keyword berbahasa Inggris, biasanya beberapa tanda baca digunakan untuk memperjelas kode Ruby
2. Ruby tidak perlu deklarasi variabel. Ruby menggunakan aturan penamaan yang mudah untuk menyatakan scope suatu variabel.
3. var adalah variabel lokal.
4. @var adalah variabel instan.
5. $var adalah variabel global.
6. Sigil – sigil tersebut bertujuan untuk memudahkan dan memperjelas ketika dibaca bagi programmer untuk mengidentifikasi fungsi dari setiap variabel. 

Ruby kaya fitur, antara lain sebagai berikut:
1. Ruby memiliki fitur-fitur yang menangani exception, seperti Java atau Python, untuk mempermudah menangani error.
2. Ruby menyediakan mark-and-sweep garbage collector untuk semua obyek Ruby.
3. Menulis extension C di Ruby lebih mudah daripada di Perl ataupun di Python, dengan API yang elegan untuk memanggil Ruby dari C. 
4. Ruby bisa load library extension secara dinamis jika Sistem Operasi mengijinkan.
5. Ruby menyediakan fitur OS threading yang independent. 
6. Ruby sangat portable: Ruby kebanyakan dikembangkan di GNU/Linux, tetapi juga berjalan di banyak tipe UNIX, Mac OS X, Windows, DOS, BeOS, OS/2, dan lain-lain.

Fitur-Fitur Penting dan Yang Perlu Diperhatikan
1. Iteration
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 list (seperti for (@a) {...} di Perl ataupun for i in aList: ... di Python). Anda akan sangat sering melihat kode yang mirip seperti ini di Ruby:

2. Semua Mempunyai Nilai
Tidak ada perbedaan antara ekspresi dan pernyataan. Semua punya value(nilai), bahkan jika value tersebut adalah nil (maksudnya, nil juga tetap punya value). 

3. Symbol Bukan String
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 siapa ini, bukan apa ini. Buka irb dan perhatikan perbedaan berikut ini:  
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 memori. 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”).
4. Semua adalah Obyek
“Semua adalah obyek” bukan sekedar hiperbola. Bahkan kelas (Class) daninteger juga obyek, dan Anda dapat melakukan hal yang sama seperti perlakuan Anda terhadap obyek-obyek lain:

5. Konstanta
Konstanta bisa diubah. Jika Anda mengubah konstanta yang sudah diinisialisasi, maka akan menyebabkan warning, tetapi tidak sampai menghentikan program Anda. Jadi maksudnya Anda seharusnya tidak mendefinisikan ulang konstanta.
6. Pengaturan Penamaan
Ruby memiliki pengaturan penamaan. Jik sebuah identifier diawali dengan huruf kapital, maka identifier tersebut merupakan konstanta. Jika identifier diawali dengan tanda dolar ($), maka identifier tersebut adalah variabel global. Jika identifier diawali dengan tanda @, maka identifier tersebut adalah instance variable. Jika identifier diawali dengan @@, maka identifier tersebut adalah variabel kelas.
Tetapi, nama-nama metode boleh diawali dengan huruf kapital. Ini bisa membingungkan, seperti ditunjukkan pada contoh berikut:

Sekarang Konstanta adalah 10, tetapi Konstanta() adalah 11.
7. Argumen Keyword
Seperti Python, metode pada Ruby 2.0 dapat didefinisikan menggunakan argumen keyword:

8. Nilai True bersifat Universal
Di Ruby, semua (kecuali nil dan false) 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):

9. Access Modifier Berlaku Sampai Akhir Scope

Anda mungkin berharap metode_lain adalah public. Tetapi tidak demikian. Access modifier private bersambung terus sampai akhir scope, atau sampai access modifier lain muncul, apapun yang muncul lebih awal. Secara default, metode bersifat public:
public, private dan protected benar-benar merupakan metode, sehingga mereka bisa menerima parameter. Jika Anda melewatkan Symbolpada satu dari parameter, maka visibility metode diubah.
10. Akses Metode
Di Java, public berarti metode bisa diakses oleh siapa saja. protectedberarti instance kelas, instance dari kelas-kelas turunan, dan instance dari kelas-kelas package yang sama dapat mengakses, tetapi tidak untuk yang lain, dan private berarti tidak ada yang dapat mengakses metode kecuali instance kelas.
Di Ruby, public secara natural adalah public. private berarti metode hanya bisa diakses ketika metode bisa dipanggil tanpa obyek penerima yang eksplisit. Hanya self yang boleh menjadi receiver pemanggilan metode private.
protected perlu diperhatikan lebih lanjut. Metode protected bisa dipanggil dari kelas ataupun instance kelas turunan, tetapi juga dengan instance lain sebagai penerima. Contoh, diadaptasi dari Ruby Language FAQ:

11. Kelas Bersifat Terbuka
Kelas Ruby bersifat terbuka. Anda bisa membuka Class, lalu menambahkan ke dalam Class, 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:

12. Nama Metode Deskriptif dan Menarik
Di Ruby, metode boleh diakhiri dengan tanda tanya ataupun tanda seru. Pengaturan nama adalah, metode-metode yang menjawab pertanyaan (seperti Array#empty? mengembalikan nilai true jika obyek penerima yaitu Array ternyata kosong) diakhiri dengan tanda tanya. Kemudian, metode-metode yang berpotensi untuk “membahayakan” (seperti metode yang mengganti self 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 tidak mengganti self.
13. Metode Singleton
Metode singleton merupakan metode-metode yang basisnya per obyek.Singleton hanya tersedia pada obyek yang Anda definisikan, jadi metode tersebut tidak tersedia pada obyek-obyek yang lain dari kelas yang sama.

14. Metode method_missing
Ruby tidak menyerah kalau Ruby tidak mendapatkan metode yang bisa menanggapi message tertentu. Ruby akan memanggil metodemethod_missing dengan nama metode yang Ruby tidak ditemukan beserta daftar parameternya. Secara default, method_missing membangkitkanexception NameError, tetapi Anda bisa mendefinisikan ulang Exceptiontersebut supaya lebih sesuai dengan aplikasi yang Anda buat, dan banyak library yang melakukan hal yang sama. Contoh:

Kode diatas hanya print detil tentang pemanggilan (call), tetapi Anda bisa dengan bebas menangani message dengan cara ini.
15. Melewatkan Message, Bukan Pemanggilan function
Pemanggilan metode adalah sungguh-sungguh merupakan message ke obyek lain:

16. Blok Bisa Diubah Menjadi Sebuah Object
Blok (closure) banyak digunakan oleh library Ruby standar. Untuk memanggil blok, Anda bisa menggunakan yield, atau membuat sebuah obyek Procdengan menambahkan argumen khusus pada list argument, seperti contoh berikut:

Anda juga dapat membuat blok diluar pemanggilan metode dengan memanggil Proc.new dengan blok atau pemanggilan metode lambda. Ketika dibuat metode juga merupakan Object.

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

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 +@ dan -@.
Tetapi operator-operator dibawah ini bukan syntactic sugar. Operator-operator dibawah ini bukan metode dan tidak dapat didefinisikan ulang:

Sistem operasi yang didukung
Linux
Microsoft Windows 95/98/XP/NT/2000/2003/Vista
MacOS X v10.5 Leopard
BeOS
OS/2
Unix
Amiga
MorphOS
Acorn RISC OS
Syllable
Symbian OS

Implementasi Lain dari Ruby
19. Ruby, sebagai sebuah bahasa, memiliki beberapa implementasi yang berbeda. Halaman ini telah mendiskusikan referensi implementasi, di dalam komunitas sering disebut sebagai MRI (“Matz’s Ruby Interpreter”) atau CRuby (karena ditulis dalam bahasa C), tetapi ada juga bahasa lainnya. Mereka sangat bermanfaat pada situasi tertentu, menyediakan integrasi dengan bahasa atau lingkungan lainnya, atau memiliki fitur khusus yang tidak dimiliki oleh MRI
20. Berikut ini daftarnya:
21. 1. J-Ruby adalah Ruby yang berjalan di atas JVM (Java Virtual Machine), memanfaatkan optimisasi JIT compiler-nya JVM, garbage collector,concurrent thread, tool ecosystem, dan kumpulan pustaka yang luas.
22. 2. Rubinius adalah ‘Ruby written in Ruby’. Dibuat di atas LLVM, Rubinius memakai sebuah virtual machine yang bagus yang bahasa lainnya sedang dibuat di atasnya, juga.
23. 3. Mac Ruby adalah Ruby yang sangat terintegrasi erat dengan pustaka Apple Cocoa untuk Mac OS X, memperbolehkan Anda untuk memprogram aplikasi desktop dengan mudah.
24. 4. M-Ruby adalah sebuah implementasi lightweight dari bahasa Ruby yang dapat dihubungkan dan ditanamkan dengan sebuah aplikasi.
25. 5. Iron Ruby adalah sebuah implementasi “tightly integrated with the .NET Framework”.
26. 6. Mag Lev adalah “a fast, stable, Ruby implementation with integrated object persistence and distributed shared cache”.
27. 7. Cardinal adalah “Ruby compiler for Parrot Virtual Machine” (Perl 6).


- Copyright © Semangat Menghadapi UPK - Blogger Templates - Powered by Blogger - Designed by Johanes Djogan -