论坛首页 综合技术论坛

scala的配套工具

浏览 3190 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-29  
FP

scala的配套工具

我自己的博客http://www.kaopua.com/blog/2011/09/29/1317234000000.html  用的pebble博客引擎,好烂,看来得改其他的了,还是iteye这边显示的好啊

scala的配套工具

评估一种开发语言是否能在生产中使用,除了这种语言(语法)本身之外,它的配套工具和生态环境也是必须考虑的重要因素。本文介绍一下scala的配套工具

软件开发的基本环节

这个图片我会在很多文章中引用,因为这是我对软件开发基本过程的理解,在考察一个开发环境时,我会考察它在过程中各个节点上的相应配套。scala本身是种编程语言,并不是某种厂商锁定的开发平台,因此需求、分析、设计等阶段并不受限于特定的工具,主要考察一下几方面

在这之前先介绍一下scala的sbaz小工具,这个工具是scala预装的命令行工具,当你把scala下载安装并配置好路径,可以在命令行执行scala的同时,这个sbaz也可用了。这个工具是用来更新和发布一些scala工具和包的,包括scala本身也可以用它来更新,它的官方说明在 http://www.scala-lang.org/node/93 ,不过我觉得记住一下3个命令就行了,因为这个工具并不是很重要,大量的scala包都不在这里发布的,但是在更新scala自身和开发环境时却很有帮助

 

  1. sbaz update: 同步发布在主库中的工具和包的索引信息,并不会去具体的更新某个库下来
  2. sbaz available: 查看目前主库中可用的工具和包,会列出名称和版本
  3. sbaz install 包名: 会下载安装该包的最新版,有两个东西是需要用sbaz马上去下来的
    1. 输入sbaz install scala-devel-docs,它就会去把scala api文档下载下来,docs会被自动安装到"scala安装路径/doc",如果这里没有,去"scala安装路径/meta/cache/找一下"
    2. 输入sbaz install scala-tool-support,然后到"scala安装路径/misc/scala-tool-support"去找各种编辑器的scala语法插件,我第一时间找到了vim的插件装上

 

编码

  • IDE:scala有eclipse,IntelliJ IDEA,NetBeans的插件,或者你可以按照上节的介绍安装vim,emacs等编辑器的插件,我个人做项目时使用的是eclipse插件,参见 http://www.scala-lang.org/node/91#ide_plugins 没什么好说的,就不赘述了
  • 单元测试是编码工作的一部分,scala主流的单元测试框架有3个
    1. scalatest是bill venners大牛的贡献,支持单元测试的各种写法,包括传统junit的和新潮的BDD风格的
    2. specs2是另一个主流单元测试框架,主要强调BDD风格的写法
    3. scalacheck 这是从haskell那边偷学来的一个测试框架,思路与传统单元测试完全不同,等会我会略做介绍
  • scalacheck一般不单独使用,前两个框架都有对scalacheck的集成。那scalatest和specs2这两个框架哪个好呢?这也是stackoverflow上的一个热门问题 不过得票第一的答案是scalatest的作者bill venners回答的(⊙ˍ⊙) ,所以。。。其实还是比较中肯啦

    BDD风格的单元测试是我开始学scala以后才学到的,现在已经很喜欢这种风格了,因为1、自然,2、可以当作规格说明书看(所以会叫specs2),比如可以这么写

	
	"MemoryObject" should "return 1 memory after mark which is persisted" in {
   		 memoryObject.mark("testHint", "testContent") should be('persisted)
	 }

	  it should "recall the content it marked" in {
    	memoryObject.mark("testHint", "testContent")
	    memoryObject.recall("testHint").get.content should be("testContent")
	 }
	
	

利用scala提供的强大的设计DSL的能力,两种框架都提供了非常好用的写BDD式单元测试的语法,上面的例子是scalatest的写法,也是我本人的开源项目recall中选用的,上面的代码来自MemorySpec

scalacheck则完全不同,它让你定义一个等式,然后造各种参数来测试这个等式(默认造100个),比如下面的例子


check((hint: String, content: String) => (hint.length() > 0 && content.length() > 0) ==> {
      memoryObject.mark(hint, content)
      memoryObject.recall(hint).get.content == content
})

这个测试的意思是在hint不为空,content不为空的前提下,只要mark了一个(hint,content),用同样的hint一定recall出同样的content,事实上当时一运行就发现hint或content为空时测试失败,才加上了hint不为空,content不为空这两个前提。。。 这个工具能有效的找到一些你没想到的漏洞,感谢haskell社区的数学家们!

构建

scala与java有很好的交互性(好吧,其实java调scala并不容易,scala调java非常方便),原来java程序员熟悉的maven和ant一样可以用。 不过scala社区一般用自己开发的(不那么simple的)sbt--simple build tool , 这个工具。。。相当复杂,功能也强大,请务必仔细看官网的说明,好好学习。 我个人建议入门可以参考我的配置 我这个recall项目的0.1.0tag 仅有不到300行代码,功能也简单,并且配置好了scalatest, logback(log4j的升级),h2database等,可以取下来编译编译、把玩把玩。

sbt于maven一样,有compile,package,test等命令,它的强大之处有两点,1、可以sbt回车进入交互模式,输入~compile(或其他命令)监听代码改变,改变后自动执行相应的命令;2、极其有用的console模式,输入sbt console,它会加载你开发的代码和你配置文件里定义的依赖库,然后给你个交互窗口,你可以直接在这里面new加载了的对象,调用方法函数等试效果,如果有什么jar包不熟悉,可以在这里把玩把玩,这个作用只有自己去体会

另外提醒一下eclipse用户请参考IntegrationSupport使用IvyDE approach来搞定,其他的不好使

测试

scala代码的测试可以用scalatest,它提供了FeatureSpecz做功能测试,specs2应该也有类似的东西,我没有试过,其他的测试方式我就不熟悉了,毕竟没怎么干过专业测试的活,就不多说了

部署

没有什么特殊的,sbt publish可以发布到maven库里,所以原来怎么管理的还是怎么管理

哦了,希望这篇介绍对你进入scala的实用能有所帮助

论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics