WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 Scala 指南: 用 Scitter 更... 阅读

面向 Java 开发人员的 Scala 指南: 用 Scitter 更新 Twitter

 2009-12-09 00:00:00 来源:WEB开发网   
核心提示: 这个版本比起 if/else 版本是否更加清晰,这很大程度上属于审美的问题,面向 Java 开发人员的 Scala 指南: 用 Scitter 更新 Twitter(9),但公平而论,这个版本也许更加简洁,开始寻找新的用 Scala 解决的项目,愿您从中找到乐趣,(很可能查看代码的人看到 Sca

这个版本比起 if/else 版本是否更加清晰,这很大程度上属于审美的问题,但公平而论,这个版本也许更加简洁。(很可能查看代码的人看到 Scala 的 “函数” 部分越多,就认为这个版本越吸引人。)

但是,相对于 if/else 版本,模式匹配版本有一个优势:如果 Twitter 返回新的条件(例如不同的错误条件或来自 HTTP 的响应代码),那么模式匹配版本在区分这些条件时可能更清晰。例如,如果某天 Twitter 决定返回 400 响应代码和一条错误消息(在主体中),以表明某种格式错误(也许是没有正确地重新 Tweet),那么与 if/else 方法相比,模式匹配版本可以更轻松(清晰)地同时测试响应代码和主体的内容。

还应注意,我们还可以使用清单 8 中的方式创建一些局部应用的函数,这些函数只需要 URL 和参数。但是,坦白说,这是一种自找麻烦的解放方案,所以我不会采用。

撤销

我们还想让 Scitter 用户可以撤销刚才执行的动作。为此,需要一个 destroy 调用,它将删除已发布的 Twitter 状态,如清单 9 所示:


清单 9. Scitter v0.3: destroy
package com.tedneward.scitter 
 
{ 
 
 class Scitter 
 
 { 
 
  // ... 
 
 
 
  def destroy(id : Long) : Option[Status] = 
 
  { 
 
   val paramsMap = Map("id" -> id.toString()) 
 
   
 
   val (statusCode, body) = 
 
    Scitter.execute("http://twitter.com/statuses/destroy/" + id.toString() + ".xml", 
 
     paramsMap, username, password) 
 
   if (statusCode == 200) 
 
   { 
 
    Some(Status.fromXml(XML.loadString(body))) 
 
   } 
 
   else 
 
   { 
 
    None 
 
   } 
 
  } 
 
  def destroy(id : Id) : Option[Status] = 
 
   destroy(id.id.toLong) 
 
 } 
 
} 

有了这些东西,我们可以考虑将这个 Scitter 客户机库作为 “alpha” 版,至少实现一个简单的 Scitter 客户机。(按照惯例,这个任务就留给您来完成,作为一项 “读者练习”。)

结束语

编写 Scitter 客户机库是一项有趣的工作。虽然不能说 Scitter 已经可以完全用于生产,但是它绝对足以用于实现简单的、基于文本的 Twitter 客户机,这意味着它已经可以投入使用了。要发现什么人可以使用它,哪些特性是需要的,从而使之变得更有用,最好的方法就是将它向公众发布。

我已经将本文和之前关于 Scitter 的文章中的代码作为第一个修订版提交到 Google Code 上的 Scitter 项目主页。欢迎下载和试用这个库,并告诉我您的想法。同时也欢迎提供 bug 报告、修复和建议。

您也无需受我的代码库的束缚。见证了之前三篇文章中进行的 Scitter 开发,您应该对 Twitter API 的使用有很好的理解。如果对于使用该 API 有不同的想法,那么尽管去做:抛开 Scitter,构建自己的 Scala 客户机库。毕竟,做做这些内部项目也是挺有乐趣的。

现在,我们要向 Scitter 挥手告别,开始寻找新的用 Scala 解决的项目。愿您从中找到乐趣,如果发现了用 Scala 编程的工作,别忘了告诉我!

本文示例源代码或素材下载

上一页  4 5 6 7 8 9 

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接