Ruby one-liners

Martin Fowler shows off what you can do with collections and closures in Ruby. I am quite impressed. I already love PHP over Java for its succinctness. Ruby seems to be even better:

managers, plebs = employees.partition{|e| e.manager?}

The same code in PHP 4 would look like this:

foreach ($employees as $employee) {
    if ($employee->isManager()) {
        $managers[] = $employee;
    } else {
        $plebs[] = $employee;
    }
}

And in Java 1.4:

List managers = new ArrayList();
List plebs = new ArrayList();
Iterator it = employees.iterator();
while (it.hasNext()) {
    Employee employee = (Employee) it.next();
    if (employee.isManager()) {
        managers.add(employee);
    } else {
        plebs.add(employee);
    }
}

Quite an improvement, eh? It seems like Ruby can eliminate a large percentage of iterate-over-collection code, and in a way that seems more natural to me than the equivalent in functional languages like Haskell, and plainly more beautiful than Perl.

I’ll sit down with a Ruby book one of these evenings.

This entry was posted in General. Bookmark the permalink.