<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7822708853941593177</id><updated>2012-02-16T17:34:44.458-08:00</updated><category term='OOP'/><category term='Ruby'/><category term='Metaprogramming'/><title type='text'>Unwritten Code</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-3346568140597094081</id><published>2008-09-15T21:27:00.000-07:00</published><updated>2008-09-15T21:40:36.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Inheritance, The Stupid Way</title><content type='html'>Inheritance bukan sekedar sharing state maupun behaviour. Programmer sangat mudah sekali untuk menyalahgunakan inheritance sehingga menghasilkan code "gila". Ini ilustrasinya:&lt;br /&gt;&lt;pre class="coding"&gt;class Monyet&lt;br /&gt;  def initialize&lt;br /&gt;    @jumlah_kaki = 2&lt;br /&gt;    @jumlah_tangan = 2&lt;br /&gt;    @jumlah_jari = 5&lt;br /&gt;  end&lt;br /&gt;  def makan&lt;br /&gt;    #...&lt;br /&gt;  end&lt;br /&gt;  def minum&lt;br /&gt;    #...&lt;br /&gt;  end&lt;br /&gt;  def buang_air&lt;br /&gt;    #...&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class Manusia &lt; Monyet&lt;br /&gt;  def belajar&lt;br /&gt;    #...&lt;br /&gt;  end&lt;br /&gt;  def membaca&lt;br /&gt;    #...&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hey.. Manusia bukanlah Monyet yang dapat belajar dan membaca! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-3346568140597094081?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/3346568140597094081/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=3346568140597094081' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/3346568140597094081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/3346568140597094081'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/09/inheritance-stupid-way.html' title='Inheritance, The Stupid Way'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-985657523245450125</id><published>2008-09-15T07:40:00.001-07:00</published><updated>2008-09-15T21:27:24.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Prototype-based Programming</title><content type='html'>Dalam pemrograman berorientasi objek, class digunakan sebagai "cetakan" atau "pabrik" untuk membuat object. Umumnya, class dan object dipandang sebagai dua hal yang berbeda, dimana object merupakan instance dari suatu class. Pemahaman seperti ini tidak salah, namun dalam paradigma object-oriented programming ini bukanlah satu-satunya cara. Salah satunya adalah Prototype-based Programming, dimana object dan class dipandang sebagai hal yang sama!!! Dalam bahasa pemrograman Ruby, untuk menerapkan metode ini sangat mudah karena kita tahu bahwa pada ruby semua adalah Object, termasuk Class itu sendiri adalah Object. Anda bisa membuktikannya melalui irb seperti contoh di bawah ini:&lt;br /&gt;&lt;pre class="coding"&gt;irb(main):001:0&gt; Class.kind_of?Object&lt;br /&gt;=&gt; true&lt;br /&gt;irb(main):002:0&gt; Object.kind_of?Class&lt;br /&gt;=&gt; true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Class adalah object dan Object (dalam konteks ini) adalah class. So, antara class dan object tidak dibeda-bedakan lagi.&lt;br /&gt;OK, sekarang kita akan bandingkan metode "class-oriented" dengan prototyped-based. Pertama, kita membuat yang class-oriented dulu:&lt;br /&gt;&lt;pre class="coding"&gt;class Hewan&lt;br /&gt;  def jumlah_kaki=(kaki)&lt;br /&gt;    @jumlah_kaki = kaki&lt;br /&gt;  end&lt;br /&gt;  def jumlah_kaki&lt;br /&gt;    @jumlah_kaki&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class Kucing &lt; Hewan&lt;br /&gt;  def initialize&lt;br /&gt;    @jumlah_kaki = 4&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;manis = Kucing.new&lt;br /&gt;&lt;br /&gt;puts manis.jumlah_kaki&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Kode di atas kita membuat class Hewan yang di dalamnya terdapat setter dan getter untuk instance variable @jumlah kaki. Kemudian kita buat class Kucing yang menurun dari class Hewan dan memiliki method konstruktor untuk menjadikan @jumlah_kaki = 4. Jika kita eksekusi, maka pada layar akan tercetak angka 4.&lt;br /&gt;OK, itu tadi class-oriented. Di bawah ini, kita buat yang model prototype-based untuk kita bandingkan.&lt;br /&gt;&lt;pre class="coding"&gt;hewan = Object.new&lt;br /&gt;&lt;br /&gt;def hewan.jumlah_kaki=(kaki)&lt;br /&gt;  @jumlah_kaki = kaki&lt;br /&gt;end&lt;br /&gt;def hewan.jumlah_kaki&lt;br /&gt;  @jumlah_kaki&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;kucing = hewan.clone&lt;br /&gt;&lt;br /&gt;kucing.jumlah_kaki = 4&lt;br /&gt;&lt;br /&gt;manis = kucing.clone&lt;br /&gt;&lt;br /&gt;puts manis.jumlah_kaki&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jika kode ini kita eksekusi, hasilnya akan sama dengan kode sebelumnya. Jika kita perhatikan, kita tidak menemukan pendefinisian class pada kode yang terakhir ini. Yang kita lakukan adalah membuat object baru kemudian memodifikasinya maupun melakukan kloning. Ya, inti dari Prototype-based programming pada Ruby adalah pada method clone. Object hewan kita kloning menjadi kucing kemudian kita tambahkan state baru berupa jumlah_kaki = 4. Kemudian kucing kita clone lagi menjadi manis, dan alhasil manis juga memiliki state dan behaviour yang sama persis dengan kucing.&lt;br /&gt;&lt;br /&gt;Selamat mencoba.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-985657523245450125?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/985657523245450125/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=985657523245450125' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/985657523245450125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/985657523245450125'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/09/prototype-based-programming.html' title='Prototype-based Programming'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-4641692606950323495</id><published>2008-08-05T00:47:00.001-07:00</published><updated>2008-09-15T19:26:34.712-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaprogramming'/><title type='text'>Meta-Meta-Programming</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TjgAp6A1f0Y/SJgGKXlRnpI/AAAAAAAAABg/uRn_To2Dhp8/s1600-h/prs.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: left; cursor: pointer;" src="http://1.bp.blogspot.com/_TjgAp6A1f0Y/SJgGKXlRnpI/AAAAAAAAABg/uRn_To2Dhp8/s400/prs.jpg" alt="" id="BLOGGER_PHOTO_ID_5230937742389649042" border="0" /&gt;&lt;/a&gt;Presentasi &lt;a href="http://drnicwilliams.com/"&gt;Dr. Nic&lt;/a&gt; tentang meta-meta-programming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-4641692606950323495?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/4641692606950323495/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=4641692606950323495' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/4641692606950323495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/4641692606950323495'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/08/meta-meta-programming.html' title='Meta-Meta-Programming'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TjgAp6A1f0Y/SJgGKXlRnpI/AAAAAAAAABg/uRn_To2Dhp8/s72-c/prs.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-1308689588712841489</id><published>2008-08-03T05:07:00.000-07:00</published><updated>2008-09-15T19:27:20.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Hello Metaprogramming</title><content type='html'>Yuk... kini saatnya kita mempraktekan teknik metaprogramming. Semacam aplikasi 'hello world' gitu deh. Saya asumsikan komputer anda telah ter-&lt;span style="font-style: italic;"&gt;install&lt;/span&gt; Interpreter Ruby (saya menggunakan Ruby 1.8.6). Saya juga mengasumsikan pembaca telah menguasai dasar-dasar bahasa pemrograman Ruby. Silahkan salin code di bawah ini menggunakan teks editor kesayangan anda kemudian beri nama &lt;span style="font-weight: bold;"&gt;manusia.rb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="coding"&gt;class Manusia&lt;br /&gt; def self.umpat(bahasa, umpatan)&lt;br /&gt;   class_eval "def mengumpat_dalam_bahasa_#{bahasa}; puts '#{umpatan}'; end"&lt;br /&gt; end&lt;br /&gt; umpat("inggris", "Shit!")&lt;br /&gt; umpat("jawa", "Jancok!")&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Simpan file tersebut di lokasi favorit anda dan jalankan program&lt;span style="font-weight: bold;"&gt; irb&lt;/span&gt; di lokasi yang sama (melalui &lt;span style="font-style: italic;"&gt;console&lt;/span&gt;). Kemudian ikuti langkah-langkah berikut ini pada irb anda:&lt;br /&gt;&lt;br /&gt;&lt;pre class="coding"&gt;irb(main):001:0&gt; require 'manusia.rb'&lt;br /&gt;=&gt; true&lt;br /&gt;irb(main):002:0&gt; saya = Manusia.new&lt;br /&gt;=&gt; #&lt;manusia:0x7f74a0d60170&gt;&lt;br /&gt;irb(main):003:0&gt; saya.mengumpat_dalam_bahasa_inggris&lt;br /&gt;Shit!&lt;br /&gt;=&gt; nil&lt;br /&gt;irb(main):004:0&gt; saya.mengumpat_dalam_bahasa_jawa&lt;br /&gt;Jancok!&lt;br /&gt;=&gt; nil&lt;br /&gt;&lt;/manusia:0x7f74a0d60170&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Sampai di sini, kita telah melakukan metaprogramming sederhana. Dimana letak &lt;span style="font-style: italic;"&gt;unwritten code&lt;/span&gt;-nya? Kita tidak pernah menulis &lt;span style="font-style: italic;"&gt;method&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;mengumpat_dalam_bahasa_inggris&lt;/span&gt; dan &lt;span style="font-weight: bold;"&gt;mengumpat_dalam_bahasa_jawa&lt;/span&gt; secara eksplisit, tapi kita bisa memanggilnya. Dari mana gerangan dia berasal? Inilah salah satu &lt;span style="font-style: italic;"&gt;contoh "magic" &lt;/span&gt;yang ada dalam metaprogramming. Rahasianya ada di method ini:&lt;br /&gt;&lt;br /&gt;&lt;pre class="coding"&gt;class_eval "def mengumpat_dalam_bahasa_#{bahasa}; puts '#{umpatan}'; end"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Selalu ingat bahwa &lt;span style="font-style: italic;"&gt;code is data, data is code&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;Berkat method &lt;span style="font-weight: bold;"&gt;class_eval&lt;/span&gt;, String&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;yang terdapat pada&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;method &lt;span style="font-weight: bold;"&gt;class_eval&lt;/span&gt; dieksekusi layaknya code walaupun kita tahu bahwa String yang "normal" itu adalah data bukan code yang harus dieksekusi oleh interpreter.&lt;br /&gt;&lt;br /&gt;Sekarang kita menginginkan supaya manusia bisa mengumpat dalam bahasa Indonesia? Bagaimana caranya? Jangan tutup console &lt;span style="font-weight: bold;"&gt;irb&lt;/span&gt; anda, kita lanjutkan yang tadi:&lt;br /&gt;&lt;br /&gt;&lt;pre class="coding"&gt;irb(main):005:0&gt; Manusia.umpat('indonesia','Kampret!')&lt;br /&gt;=&gt; nil&lt;br /&gt;irb(main):006:0&gt; saya.mengumpat_dalam_bahasa_indonesia&lt;br /&gt;Kampret!&lt;br /&gt;=&gt; nil&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Yay..&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;sekarang manusia bisa mengumpat dalam bahasa Indonesia. Hal ini dimungkinkan karena pada bahasa Ruby, class selalu terbuka (open). Kapanpun kita bisa menambahkan atribut ke dalam class yang kita inginkan.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-1308689588712841489?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/1308689588712841489/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=1308689588712841489' title='4 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/1308689588712841489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/1308689588712841489'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/08/hello-metaprogramming.html' title='Hello Metaprogramming'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-3496929738415019850</id><published>2008-08-03T03:48:00.000-07:00</published><updated>2008-09-15T19:27:46.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Metaprogramming, Mengapa Ruby?</title><content type='html'>Metaprogramming:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;program yang menulis program&lt;br /&gt;&lt;/li&gt;&lt;li&gt;tool yang sangat istimewa untuk membuat &lt;span style="font-style: italic;"&gt;framework&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;kunci utama dalam pembuatan &lt;span style="font-style: italic;"&gt;domain-specific languages&lt;/span&gt; (DSL)&lt;/li&gt;&lt;/ul&gt;Ruby cocok untuk metaprogramming, karena:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;dynamic&lt;/span&gt; dan &lt;span style="font-style: italic;"&gt;reflexive&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;open&lt;/span&gt; dan &lt;span style="font-style: italic;"&gt;malleable&lt;/span&gt;&lt;/li&gt;&lt;li style="font-style: italic;"&gt;code is data, data is code&lt;/li&gt;&lt;li&gt;sintaks yang bersih&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;programming event model&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-3496929738415019850?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/3496929738415019850/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=3496929738415019850' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/3496929738415019850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/3496929738415019850'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/08/metaprogramming-mengapa-ruby.html' title='Metaprogramming, Mengapa Ruby?'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-6239844773196706440</id><published>2008-08-03T00:16:00.000-07:00</published><updated>2008-09-15T19:28:08.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Laws Of Ruby Weapon</title><content type='html'>Untuk mempraktekan "seni sulap" dengan teknik metaprogramming, saya memilih untuk menggunakan bahasa pemrograman Ruby. &lt;a href="http://drnicwilliams.com/"&gt;Dr. Nic&lt;/a&gt;, salah satu "ahli sulap" di dunia Ruby dan Ruby On Rails memberikan 3 aturan yang disebut &lt;span style="font-style: italic;"&gt;Laws Of Ruby Weapon&lt;/span&gt;:&lt;br /&gt;1. &lt;span style="font-style: italic;"&gt;Made at runtime.&lt;/span&gt;&lt;br /&gt;2. &lt;span style="font-style: italic;"&gt;Access at runtime.&lt;/span&gt;&lt;br /&gt;3. &lt;span style="font-style: italic;"&gt;Fixed at runtime.&lt;/span&gt;&lt;br /&gt;Bila diperhatikan, semua dikerjakan pada saat &lt;span style="font-style: italic;"&gt;runtime&lt;/span&gt;..&lt;br /&gt;&lt;span style="font-style: italic;"&gt;That's The Ruby Way!!!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-6239844773196706440?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/6239844773196706440/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=6239844773196706440' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/6239844773196706440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/6239844773196706440'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/08/laws-of-ruby-weapon.html' title='Laws Of Ruby Weapon'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7822708853941593177.post-6897022520142416499</id><published>2008-07-28T06:26:00.000-07:00</published><updated>2008-09-15T19:28:36.254-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaprogramming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Metaprogramming?</title><content type='html'>Metaprogramming adalah teknik pemrograman dimana code yang kita tulis akan menulis code yang lain atau melakukan&lt;span style="font-style: italic;"&gt; introspect&lt;/span&gt; terhadap dirinya sendiri. Kata meta yang merupakan awalan dari kata metaprogramming memiliki arti abstraksi. Teknik metaprogramming bekerja pada dua tingkatan abstraksi secara simultan. Untuk melakukan metaprogramming dapat digunakan berbagai macam bahasa pemrograman, tetapi yang paling populer adalah bahasa pemrograman dinamis. Mengapa bahasa dinamis? Karena bahasa dinamis memiliki kemampuan manipulasi code layaknya data pada saat &lt;span style="font-style: italic;"&gt;runtime&lt;/span&gt;. Walaupun &lt;span style="font-style: italic;"&gt;reflection&lt;/span&gt; juga tersedia pada bahasa statis seperti Java dan C#, akan tetapi tidak bisa setransparan seperti pada bahasa dinamis macam Ruby, Python, dan Lisp. Hal ini karena pada bahasa statis, code dan data memiliki tingkatan yang berbeda pada saat &lt;span style="font-style: italic;"&gt;runtime&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Untuk mencegah duplikasi code yang sama biasanya kita membuat suatu fungsi. Hal ini disebut dengan instilah &lt;span style="font-style: italic;"&gt;functional abstraction&lt;/span&gt;. Salah satu fungsi dari metaprogramming juga mirip dengan ini, namun bukan untuk mencegah duplikasi code melainkan mencegah duplikasi konsep. Singkat kata, redundansi code dapat difaktorkan menjadi fungsi, redundansi fungsi atau pattern dapat (walaupun tidak selalu) difaktorkan menggunakan teknik metaprogramming.&lt;br /&gt;&lt;br /&gt;Metaprogramming dibuat untuk kesederhanaan. Namun metaprogramming memiliki berbagai resiko yang cukup berbahaya, misalnya:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Code sulit dipelihara&lt;/li&gt;&lt;li&gt;Performa turun drastis&lt;/li&gt;&lt;/ul&gt;Dengan pemahaman yang matang tentang teknik metaprogramming, hal-hal tersebut dapat dihindari. Selamat belajar metaprogramming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7822708853941593177-6897022520142416499?l=unwrittencode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://unwrittencode.blogspot.com/feeds/6897022520142416499/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7822708853941593177&amp;postID=6897022520142416499' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/6897022520142416499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7822708853941593177/posts/default/6897022520142416499'/><link rel='alternate' type='text/html' href='http://unwrittencode.blogspot.com/2008/07/metaprogramming.html' title='Metaprogramming?'/><author><name>agionagile</name><uri>http://www.blogger.com/profile/16558003663812428994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
