scala的配套工具
scala的配套工具
评估一种开发语言是否能在生产中使用,除了这种语言(语法)本身之外,它的配套工具和生态环境也是必须考虑的重要因素。本文介绍一下scala的配套工具
软件开发的基本环节
这个图片我会在很多文章中引用,因为这是我对软件开发基本过程的理解,在考察一个开发环境时,我会考察它在过程中各个节点上的相应配套。scala本身是种编程语言,并不是某种厂商锁定的开发平台,因此需求、分析、设计等阶段并不受限于特定的工具,主要考察一下几方面
在这之前先介绍一下scala的sbaz小工具,这个工具是scala预装的命令行工具,当你把scala下载安装并配置好路径,可以在命令行执行scala的同时,这个sbaz也可用了。这个工具是用来更新和发布一些scala工具和包的,包括scala本身也可以用它来更新,它的官方说明在 http://www.scala-lang.org/node/93 ,不过我觉得记住一下3个命令就行了,因为这个工具并不是很重要,大量的scala包都不在这里发布的,但是在更新scala自身和开发环境时却很有帮助
- sbaz update: 同步发布在主库中的工具和包的索引信息,并不会去具体的更新某个库下来
- sbaz available: 查看目前主库中可用的工具和包,会列出名称和版本
- sbaz install 包名: 会下载安装该包的最新版,有两个东西是需要用sbaz马上去下来的
- 输入sbaz install scala-devel-docs,它就会去把scala api文档下载下来,docs会被自动安装到"scala安装路径/doc",如果这里没有,去"scala安装路径/meta/cache/找一下"
- 输入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个
-
scalatest是bill venners大牛的贡献,支持单元测试的各种写法,包括传统junit的和新潮的BDD风格的
-
specs2是另一个主流单元测试框架,主要强调BDD风格的写法
-
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的实用能有所帮助
分享到:
相关推荐
在压缩包“scala配套代码”中,可能包含了一系列的示例程序,涵盖了上述概念的实践应用。这些代码可以帮助学习者通过实践来更好地理解和掌握Scala语言的各个方面,包括基本语法、函数式编程特性、类与对象的设计以及...
通过学习这些代码清单,读者不仅可以深入理解Scala语言本身,还能掌握如何利用Scala构建实际的、高效的应用程序,特别是当涉及到响应式编程和构建工具的使用时,能更好地适应现代软件开发的需求。
- **循环控制**:Scala中没有传统的`continue`和`break`语句,而是提供了更高级的迭代工具如`foreach`等。 - **Scala中的特殊语法**: - **变长参数**:通过使用`*_`语法,可以在函数定义中指定变长参数列表,这...
这份“最新整理的大数据scala和spark视频教程”为想要深入理解和掌握这两个工具的学习者提供了宝贵的资源。 Scala(Scalable Language)是一种多范式编程语言,融合了面向对象和函数式编程的特性。它由Martin ...
4,每一块知识点, 都有配套案例, 学习不再迷茫。 课程简介 第一章 环境搭建 00.导学 01.Scala简介 02.Scala程序和Java程序对比 03.Scala环境搭建 04.Scala解释器 05.案例_做最好的自己 第二章 变量和数据类型 00....
StreamPark2.0.0是基于Scala ...总之,StreamPark2.0.0是一个强大的流处理平台,结合了Flink的强大计算能力与易用的用户界面,为开发者和业务人员提供了高效的数据处理工具,适用于需要实时分析和响应的各类业务场景。
在描述中提到,该项目可能不再处于积极的开发阶段,这意味着尽管 Scala Router 曾经是一个流行的工具,但可能不再接收频繁的更新或新功能的添加。不过,对于那些已经稳定并满足需求的项目来说,这并不意味着它不能...
《动手Scala.js》是一本深入介绍Scala.js技术的书籍,其配套代码库包含了书中所有示例的源代码。Scala.js是Scala语言的一个编译器插件,它允许开发者使用Scala语法编写JavaScript应用,从而利用Scala的强大特性和...
4. **Workshop**:WebLogic Workshop是BEA Systems(后被Oracle收购)为WebLogic Server配套的开发工具,专为开发J2EE应用设计,支持PageFlow架构,便于创建Web应用、EJB和Web服务。随着Oracle JDeveloper的推广,...
Spark支持Scala语言,它提供了高效的分布式计算能力,能快速处理大规模数据。推荐系统常见的分析方法包括协同过滤、基于内容的推荐和矩阵分解等。 4. **矩阵分解**:例如在本案例中提到的FM(Factorization ...
'[IT18掌www.it18zhang.com]003.Ubuntu下载与虚拟机下安装.pptx' '[IT18掌www.it18zhang.com]016.Hadoop 架构分析之启动脚本分析.pptx' '[IT18掌www.it18zhang.com]Scala.pptx' '[IT18掌www.it18zhang.com]004....
Tock on LiteX 这是在 SoC上运行的配套存储库。... 这些可用于避免下载大型FPGA工具链来构建比特流或Scala,以用于自定义VexRiscv CPU变体。LiteX Simulation(仿真器) 要运行LiteX仿真以及相应的,可以输入具有所
- RISC-V工具:这是与Rocket Chip配套使用的软件工具链。 在Rocket Chip目录结构中,其他文件夹的用途包括: - Glue code:这些代码用于与C++仿真器结合使用。 - C++ emulator的build目录:包含生成的代码和可执行...
比如,统计文件行数可以使用`count()`方法,而创建Spark应用并打包成JAR文件则涉及到构建工具如sbt或Maven的使用。一旦应用编写完成,可以通过`spark-submit`命令提交到Spark集群执行。 接下来,实验中还涉及到了两...
Spark提供了统一的API,包括Scala、Java、Python和R语言接口,方便不同背景的开发人员使用。 2. **Spark组件**: - **Spark Core**:基础执行引擎,负责任务调度、内存管理、错误恢复和与其他模块的通信。 - **...
- `code`:这部分可能包含用Scala、Python或Java编写的Spark程序,用于读取、处理和分析`data`目录中的数据,执行各种计算任务,如数据清洗、转换、聚合、机器学习模型训练等。 6. **实战应用**:通过这些代码,...
"Component : scala vector graphics GaugeExample Component"暗示这可能是一个示例组件,用于展示如何在GUI应用中创建可缩放矢量图形的仪表盘(Gauge)。 标签“svg”代表SVG技术,“GAUGE”代表仪表盘组件,...
《Flink 实用教程》针对这些问题提供了详尽的解决方案,包括面向零基础的讲解、全面系统的内容覆盖、基于最新版本的代码示例,以及双语实现的 Scala 和 Java 代码。此外,教程还强调了动手实践的重要性,提供了配套...
2. **示例代码**:为了帮助用户更好地理解DFB的实际操作,压缩包可能包含各种编程语言(如Java、Python或Scala)的示例代码。这些代码可能涵盖了从简单的数据读取、转换到复杂的流处理任务,用户可以通过运行和修改...