|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "Tentang Ruby" |
| 4 | +lang: id |
| 5 | +--- |
| 6 | + |
| 7 | +Anda heran mengapa Ruby sangat populer? Penggemar Ruby menyebut Ruby |
| 8 | +sebagai bahasa yang cantik dan artistik. Mereka juga menyebut Ruby |
| 9 | +praktis dan mudah. Apa lagi? |
| 10 | + |
| 11 | +### Idealisme Pencipta Ruby |
| 12 | + |
| 13 | +{: |
| 14 | +style="padding-left:8px;"} |
| 15 | +{: style="float:right"} |
| 16 | + |
| 17 | +Ruby merupakan bahasa yang seimbang. Pencipta Ruby, [Yukihiro “matz” |
| 18 | +Matsumoto][1], menggabungkan bagian-bagian dari bahasa-bahasa favorit |
| 19 | +beliau (Perl, Smalltalk, Eiffel, Ada dan Lisp) untuk membentuk bahasa |
| 20 | +baru yang seimbang antara pemrograman fungsional dengan pemrograman |
| 21 | +imperatif. |
| 22 | + |
| 23 | +Matz sering menyebutkan bahwa beliau sedang “mencoba membuat Ruby |
| 24 | +natural, bukan sederhana,” dengan cara membuatnya mirip dengan kehidupan |
| 25 | +nyata. |
| 26 | + |
| 27 | +Berprinsip pada hal ini, Matz menambahkan: |
| 28 | + |
| 29 | +> Penampilan Ruby dari luar sederhana, tetapi sangat rumit di bagian |
| 30 | +> dalam, seperti badan manusia kita ini<sup>[1](#fn1)</sup>. |
| 31 | +
|
| 32 | +### Tentang Perkembangan Ruby |
| 33 | + |
| 34 | +Sejak Ruby pertama kali dirilis ke publik pada tahun 1995, banyak |
| 35 | +programmer profesional dari seluruh dunia serius ikut mengembangkan |
| 36 | +Ruby. Pada tahun 2006, Ruby diterima oleh banyak orang. Dengan komunitas |
| 37 | +pengguna Ruby yang aktif di banyak kota-kota di seluruh dunia dan |
| 38 | +konferensi-konferensi beserta pertemuan Ruby terkait. |
| 39 | + |
| 40 | +{: style="padding-left:8px;"} |
| 43 | +{: style="float:right"} |
| 44 | + |
| 45 | +Ruby-Talk, [milis](/id/community/mailing-lists/) utama untuk diskusi |
| 46 | +Ruby (dalam bahasa Inggris) telah mencapai kisaran 200 email setiap |
| 47 | +hari. |
| 48 | + |
| 49 | +TIOBE index, yang menghitung perkembangan bahasa-bahasa pemrograman, |
| 50 | +menempatkan Ruby pada peringkat ke 10 diantara bahasa-bahasa pemrograman |
| 51 | +di seluruh dunia. Melihat pada perkembangan ini, mereka memperkirakan, |
| 52 | +“Kesempatan Ruby memasuki peringkat atas 10 besar adalah dalam waktu |
| 53 | +setengah tahun.” Kebanyakan dari perkembangan Ruby beratribut pada |
| 54 | +terkenalnya software yang ditulis dengan Ruby, terutama framework web |
| 55 | +Ruby on Rails<sup>[2](#fn2)</sup>. |
| 56 | + |
| 57 | +Ruby juga [sepenuhnya bebas](/en/about/license.txt). Tidak hanya gratis, |
| 58 | +tetapi juga bebas untuk menggunakan, memodifikasi dan mendistribusikan |
| 59 | +Ruby. |
| 60 | + |
| 61 | +### Melihat Semua sebagai Obyek |
| 62 | + |
| 63 | +Pertama kali, Matz melihat bahasa-bahasa lain untuk mencari sintaks yang |
| 64 | +ideal. Terkenang pencariannya, Matz berkata, “Saya mau bahasa scripting |
| 65 | +yang lebih hebat daripada Perl dan lebih berorientasi obyek daripada |
| 66 | +Python<sup>[3](#fn3)</sup>.” |
| 67 | + |
| 68 | +Di Ruby, semua adalah obyek. Setiap informasi dan kode bisa diberi |
| 69 | +property dan action. Pemrograman berorientasi obyek memanggil property |
| 70 | +dengan nama *variabel instan* dan action, yang disebut sebagai *metode*. |
| 71 | +Pendekatan murni berorientasi obyek terutama terlihat pada demonstrasi |
| 72 | +sedikit kode yang diberikan pada number. |
| 73 | + |
| 74 | + 5.times { print "Kami *cinta* Ruby -- Ruby sungguh aduhai!" } |
| 75 | +{: .code .ruby-code} |
| 76 | + |
| 77 | +Di banyak bahasa-bahasa lain, number dan tipe primitif bukan obyek. Ruby |
| 78 | +mengikuti pengaruh bahasa Smalltalk dengan memberikan metode dan |
| 79 | +variabel instan pada semua tipe. Ini memudahkan menggunakan Ruby, karena |
| 80 | +peraturan-peraturan mengenai obyek semua berlaku pada Ruby. |
| 81 | + |
| 82 | +### Ruby Fleksibel |
| 83 | + |
| 84 | +Ruby dianggap sebagai bahasa yang fleksibel, karena bagian-bagian dari |
| 85 | +Ruby bisa diubah-ubah dengan bebas. Bagian-bagian yang esensi di Ruby |
| 86 | +bisa dihapus maupun didefinisikan ulang. Bagian-bagian yang sudah ada |
| 87 | +bisa ditambahkan. Ruby mencoba untuk tidak membatasi programmer. |
| 88 | + |
| 89 | +Misalnya, penambahan dilakukan dengan operator plus (`+`). Tetapi, jika |
| 90 | +Anda ingin menggunakan kata `plus` yang lebih mudah dibaca, maka Anda |
| 91 | +dapat menambahkan metode tersebut pada kelas builtin `Numeric`. |
| 92 | + |
| 93 | + class Numeric |
| 94 | + def plus(x) |
| 95 | + self.+(x) |
| 96 | + end |
| 97 | + end |
| 98 | + |
| 99 | + y = 5.plus 6 |
| 100 | + # y sekarang adalah 11 |
| 101 | +{: .code .ruby-code} |
| 102 | + |
| 103 | +Demi kemudahan, operator-operator Ruby adalah juga metode. Anda juga |
| 104 | +bisa mendefinisikan ulang operator. |
| 105 | + |
| 106 | +### Blok, Fitur yang sungguh Ekspresif |
| 107 | + |
| 108 | +Blok Ruby juga dianggap sebagai sumber kekuatan Ruby yang sangat |
| 109 | +fleksibel. Programmer dapat menyertakan closure pada setiap metode, |
| 110 | +menjelaskan bagaimana metode yang bersangkutan seharusnya berperilaku. |
| 111 | +Closure disebut *blok* dan telah menjadi satu diantara banyak |
| 112 | +fitur-fitur Ruby yang paling populer pada banyak pendatang baru Ruby |
| 113 | +dari bahasa-bahasa imperatif lain seperti PHP atau Visual Basic. |
| 114 | + |
| 115 | +Blok terinspirasi dari bahasa-bahasa fungsional. Matz berkata, “Saya |
| 116 | +ingin menghormati kultur Lisp di closure Ruby<sup>[4](#fn4)</sup>.” |
| 117 | + |
| 118 | + search_engines = |
| 119 | + %w[Google Yahoo MSN].map do |engine| |
| 120 | + "http://www." + engine.downcase + ".com" |
| 121 | + end |
| 122 | +{: .code .ruby-code} |
| 123 | + |
| 124 | +Pada kode diatas, blok dijelaskan dalam bentuk `do ... end`. Metode |
| 125 | +`map` memberlakukan blok agar menerima array kata-kata (Google, Yahoo |
| 126 | +dan MSN). Banyak metode-metode lain di Ruby dibiarkan mempunyai hole |
| 127 | +yang dibuka untuk programmer agar menulis blok mereka sendiri untuk |
| 128 | +mengisi dengan lebih lengkap apa saja yang seharusnya sebuah metode |
| 129 | +lakukan. |
| 130 | + |
| 131 | +### Ruby dan Mixin |
| 132 | + |
| 133 | +Tidak seperti banyak bahasa-bahasa berorientasi obyek lain, Ruby hanya |
| 134 | +menyediakan single inheritance **dengan sengaja**. Tetapi Ruby |
| 135 | +mengetahui konsep module (disebut sebagai Categories di Objective-C). |
| 136 | +Module merupakan kumpulan dari metode-metode. |
| 137 | + |
| 138 | +Kelas dapat me-mixin (menggabungkan) sebuah module dan menerima semua |
| 139 | +metode-metode (dari module yang bersangkutan) dengan bebas. Contoh, |
| 140 | +setiap kelas yang mengimplementasikan metode `each` bisa mixin module |
| 141 | +`Enumerable`, yang menambahkan banyak metode-metode yang menggunakan |
| 142 | +`each` untuk melakukan perulangan. |
| 143 | + |
| 144 | + class MyArray |
| 145 | + include Enumerable |
| 146 | + end |
| 147 | +{: .code .ruby-code} |
| 148 | + |
| 149 | +Secara umum, <abbr title="Matz telah mendeklarasikan pengguna Ruby |
| 150 | +disebut Rubyist">Rubyist</abbr> menganggap ini sebagai cara yang lebih |
| 151 | +jelas ketimbang multiple inheritance, yang rumit dan bahkan terlalu |
| 152 | +membatasi. |
| 153 | + |
| 154 | +### Tampilan Ruby secara Visual |
| 155 | + |
| 156 | +Ruby jarang menggunakan tanda baca dan biasanya cenderung menggunakan |
| 157 | +keyword berbahasa Inggris, biasanya beberapa tanda baca digunakan untuk |
| 158 | +memperjelas kode Ruby |
| 159 | + |
| 160 | +Ruby tidak perlu deklarasi variabel. Ruby menggunakan aturan penamaan |
| 161 | +yang mudah untuk menyatakan scope suatu variabel. |
| 162 | + |
| 163 | +* `var` adalah variabel lokal. |
| 164 | +* `@var` adalah variabel instan. |
| 165 | +* `$var` adalah variabel global. |
| 166 | + |
| 167 | +[Sigil-sigil][2] tersebut bertujuan untuk memudahkan dan memperjelas |
| 168 | +ketika dibaca bagi programmer untuk mengidentifikasi fungsi dari setiap |
| 169 | +variabel. Sigil juga bisa menjadi hal yang tidak perlu bila harus |
| 170 | +digunakan pada setiap member instan `self.` |
| 171 | + |
| 172 | +### Langkah Selanjutnya |
| 173 | + |
| 174 | +Ruby kaya fitur, antara lain sebagai berikut: |
| 175 | + |
| 176 | +* Ruby memiliki fitur-fitur yang menangani exception, seperti Java atau |
| 177 | + Python, untuk mempermudah menangani error. |
| 178 | +^ |
| 179 | + |
| 180 | +* Ruby menyediakan mark-and-sweep garbage collector untuk semua obyek |
| 181 | + Ruby. Tidak perlu me-maintain reference count pada library extension. |
| 182 | + Seperti yang Matz katakan, “Ini lebih baik untuk kesehatan Anda.” |
| 183 | +^ |
| 184 | + |
| 185 | +* Menulis extension C di Ruby lebih mudah daripada di Perl ataupun di |
| 186 | + Python, dengan API yang elegan untuk memanggil Ruby dari C. Ini |
| 187 | + termasuk memanggil Ruby embedded di software, untuk digunakan sebagai |
| 188 | + bahasa scripting. Interface SWIG juga tersedia. |
| 189 | +^ |
| 190 | + |
| 191 | +* Ruby bisa load library extension secara dinamis jika Sistem Operasi |
| 192 | + mengijinkan. |
| 193 | +^ |
| 194 | + |
| 195 | +* Ruby menyediakan fitur OS threading yang independent. Maka, untuk |
| 196 | + semua platform dimana Ruby berjalan, Anda juga punya multithreading, |
| 197 | + terlepas dari apakah Sistem Operasi mendukung multithreading atau |
| 198 | + tidak, bahkan pada MS-DOS sekalipun! |
| 199 | +^ |
| 200 | + |
| 201 | +* Ruby sangat portable: Ruby kebanyakan dikembangkan di GNU/Linux, |
| 202 | + tetapi juga berjalan di banyak tipe UNIX, Mac OS X, Windows |
| 203 | + 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, dan lain-lain. |
| 204 | + |
| 205 | +#### Referensi |
| 206 | + |
| 207 | +<sup>1</sup> Matz, berbicara di milis Ruby-Talk, [12 Mei 2000][3]. |
| 208 | +{: #fn1} |
| 209 | + |
| 210 | +<sup>2</sup> Lihat situs [Ruby on Rails][4] untuk info lebih lengkap. |
| 211 | +{: #fn2} |
| 212 | + |
| 213 | +<sup>3</sup> Matz, [An Interview with the Creator of Ruby][5], |
| 214 | +(Wawancara dengan Pencipta Ruby, dalam Bahasa Inggris), 29 November |
| 215 | +2001. |
| 216 | +{: #fn3} |
| 217 | + |
| 218 | +<sup>4</sup> Matz, [Blocks and Closures in Ruby][6], (Blok dan Closure |
| 219 | +di Ruby, dalam Bahasa Inggris), 22 Desember 2003. |
| 220 | +{: #fn4} |
| 221 | + |
| 222 | + |
| 223 | + |
| 224 | +[1]: http://www.rubyist.net/~matz/ |
| 225 | +[2]: http://en.wikipedia.org/wiki/Sigil_%28computer_programming%29 |
| 226 | +[3]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773 |
| 227 | +[4]: http://rubyonrails.org/ |
| 228 | +[5]: http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html |
| 229 | +[6]: http://www.artima.com/intv/closures2.html |
0 commit comments