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.