轻量级开发的成功秘诀,第 7 部分: Java 替代方案
2009-11-11 00:00:00 来源:WEB开发网for(i=0;i<array.size();i++) {
System.out.println(array[i]);
}
在 Ruby 中,要这样写:
array.each {|element| puts element}
您没必要为迭代如何进行而担心,因此花费的工作量要少得多。您只是把花括号(我们把这个块叫做 闭包(closure))中的代码传递到数组中,每个方法都知道如何完成迭代。需要迭代器的 Java 集合比我在这里给出的例子更糟糕,因为您被迫声明和使用独立的迭代器。当然,Ruby 也有循环和迭代器,但您不需要使用它们,同样因为有一个以闭包的形式存在的更高的抽象。
闭包不只是用来迭代的。它们也使得许多问题都易于解决:
以一个代码块遍历数据库是容易的:
dbh.execute("SELECT * FROM words") do |s|
s.fetch_array do |row|
puts row.join(", ")
end
end
划分事务是自然的:
Account.transaction(david, mary) do
david.withdrawal(100)
mary.deposit(100)
end
可以在共享代码的主体中隐藏资源管理和异常的冗长细节。使用该策略,文件处理会更加简洁。
单独使用闭包,可以大大限制代码行的数量。当然,可以在 Java 语言中以更多的代码使用匿名代码块来模仿闭包,但这种技术写起来和读起来都有些笨拙。
延续
延续(continuation)是另一个抽象,它变得越来越重要。延续让您能够在任何时刻及时捕获执行状态(使用实例变量和调用栈)。您可以在晚些时候及时返回那一点。对 Web 服务器来说,也许希望在询问用户信息之前捕获一个延续。然后,当用户返回控制权到应用程序服务器时,就可以恢复延续。使用延续服务器,比如 Seaside 和 Iowa,可以编写无状态的 Web 应用程序,就像编写任何其他有状态的用户界面一样。
更多精彩
赞助商链接