wood burning stoves*
The moose likes Ruby and the fly likes How is metaprogramming in Ruby better? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Languages » Ruby
Bookmark "How is metaprogramming in Ruby better?" Watch "How is metaprogramming in Ruby better?" New topic
Author

How is metaprogramming in Ruby better?

Joseph Rose
Greenhorn

Joined: Feb 02, 2010
Posts: 2
Aloha,

I have recently picked up an interest in Ruby and I am curious to learn about metaprogramming. What makes it different then regular programming practices?

Thanks.
Katrina Owen
Sheriff

Joined: Nov 03, 2006
Posts: 1357
    
  17
Better? It does seem that asking which is better is a bit like you are comparing raspberries and steak. Both are great, useful, and healthy, but have different (and perhaps complimentary) uses. I don't think I'd want to choose one or the other exclusively.
Paolo Perrotta
author
Greenhorn

Joined: Mar 27, 2010
Posts: 27
It's difficult to explain how metaprogramming works and how it's useful in just a few sentences (unless you already know about it, and then it feels very easy and natural).
Instead, I can point you to the Introduction chapter from Metaprogramming Ruby. You can download it freely here: http://media.pragprog.com/titles/ppmetr/introduction.pdf .
Enjoy!


Paolo Perrotta, Europe
Author of Metaprogramming Ruby
http://www.pragprog.com/titles/ppmetr/metaprogramming-ruby
David Newton
Author
Rancher

Joined: Sep 29, 2008
Posts: 12617

Metaprogramming is programming about programming: it's code that writes code, but in a different way than compile-time generation like most Java code generation. Because Ruby is highly dynamic, things like getters and setters can be written by a method that writes additional methods:This ends up generating a class that looks like this:A trivial example, yes, but it's important to understand when and how this is happening. This allows very simple programmatic generation of instance methods *at runtime*. Now think about something like this:Now, with an absolute minimum of intrusiveness, we've defined some instance requirements, at runtime, in code, using a mini-validation DSL. validates_presence_of and validates_length_of are methods that generate behavior.

One thing I worked on was a test framework for web pages. Driving Selenium, I was able to code and test pages like this:

Like Lisp macros, metaprogramming can be difficult to explain, but the power and clarity it can provide is *huge*.
 
 
subject: How is metaprogramming in Ruby better?
 
Similar Threads
Metaprogramming: essential part of Ruby
What is the aim of the book<Meta Programming in Ruby>?
Metaprogramming vs plain Ruby or other languages
Metaprogramming : not for everyone ?
metasploit project as Ruby learning example