Scala 函数式编程学习视频 -- 课程介绍

Functional Programming Principles in Scala 课程介绍及课程安排,视频中会提些小问题,会在后面的视频中看到答案。其后三个视频将会涉及到 Scala 环境的设置,包括 Windows, Mac OS X 和 Linux 下的工具设置。我们将接触到 SBT(Simple Build Tool),其实是名不符实,SBT 是我用过最不简单的构建工具。我也觉得 SBT 叫做 Scala Build Tool 才合适,可以选择 Gradle,不过本课程是用 SBT。IDE 的话基本就是 Eclipse, IDEA 二分天下。

挂上了英文字幕,你要在官方学完这套课程还能得到一个认证,形式而已。

阅读全文 >>

类别: Scala. 标签: , . 阅读(191). 评论(0) »

配置 Scala 的 vim 编辑环境

能在 Eclipse 或是 IDEA 中写 Scala 程序当然是不错的,但有时候还是有必要在更轻量级的文本编辑器中编辑,在 Unix 族系统中首推 vi。要让更好的编辑 Scala, 最主要就是让 vi 支持 Scala 的语法高亮。

有现成的 vi 插件,https://github.com/scala/scala-dist/tree/master/tool-support/src/vim。下载下来三个目录 indent, syntax 和 ftdetect 及文件放在 ~/.vim 目录下.

然后到 vim 中命令 syntax on 打开语法高亮就能识别 *.scala 文件高亮显示 Scala 代码了。应该把 syn on 加到 vim 的初始化脚本  ~/.vimrc 文件中去。

更为自动的一点是有人把下载支持文件做成了一句语 bash 脚本 阅读全文 >>

类别: Scala, Vim. 标签: , . 阅读(1,345). 评论(0) »

Play2.3 自定义模板类型 -- Java 版

在上一篇 Play2 自定义模板类型 (Java&Scala),是基于 Play2.2 怎么自定义 Json 模板类型,分别用 Java 和 Scala 实现。从 Play2.3 开始,模板明确了是用 Twirl,所以构建文件上的配置略有不同,并且模板编译出的源文件位置也不一样,Play2.2 前生成的模板源文件在 target/scala-2.10/src_managed/main/views 目录,现在是生成在 target/twirl/main/views 目录。

在 Play2.3 中仍然是默认只支持 html, txt, xml, js 四种类型的模板,见 SbtTwirl。我们这里还是以增加 Json 模板支持为例,且只介绍用 Java 的方式。因为 Play2 尽管可以用 Java 来编写应用,但实现部份基本是 Scala,所以如果用 Scala 来进行扩展相对来说来比用 Java 简单些。

Play2.3 官方的自定义模板的文档 Adding support for a custom format to the template engine 有些出入,似乎还未来得急更新,以实操为证。

还是从构建文件开始 阅读全文 >>

类别: PlayFramework. 标签: . 阅读(789). 评论(0) »

Scala + JUnit 怎么使用 @Rule

JUnit 是个很著名的飞行模式测试框架,即使到了 Scala 中还是免不了要用 JUnit Style 的测试方式,基于 Spec 的方式并不处处行得通,比如想要在 Scala 中使用 JMockit 框架时。

JUnit 提供给我们有两个扩展点,RunnerRule, Runner 扩展点一般被各种框架劫持了,自己搞个 @RunWith(SomeRunner.class) 可能让你无法在测试中应用框架。于是剩下了 Rule 是个更自由的扩展点,这里不讲述怎么定制自己的 Rule,而是怎么用它,怎么在 Scala 中用它。之前的一篇 JUnit 4 如何正确测试异常 中使用了 ExpectedException 这个 Rule。

Rule 的要求是: Annotates fields that reference rules or methods that return a rule. A field must be public, not static, and a subtype of TestRule (preferred) or MethodRule. A method must be public, not static, and must return a subtype of TestRule (preferred) or MethodRule. 属性或方法必须是 public 非静态的,它们的类型或返回类型必须分别是 TestRuleMethedRule

这里尝试以 Java 的方式使用另一个 Rule,TestName, 可以得到当前测试方法的名称 阅读全文 >>

类别: Scala. 标签: , . 阅读(1,495). 评论(0) »

Play2 自定义模板类型 (Java&Scala)

Play2 默认支持的模板类型是 html, txt, xml 和 js,不在这些支持之列的模板文件即使放到 app/views 目录中,也不会被编译的。如果要支持自定义的模板类型就要些定制了,这比 Play1 复杂些。模板的定制包括在 Build.scala 或 build.sbt 中加上 templatesTypes 配置,并需创建 BufferedContent 和 Format 实现类。下面以增加 json 模板类型为例,兼顾 Scala 和 Java 的实现类,是基于 Play2.2 的,在 Play2.3 中又略有不同。

官方有相关的文档,参考:Custom formats on Scala, Custom formats on Java模板定义参考.

在较新一些的 2.2 的 PlaySettings 中,可以看到

弄清了上面的原理后,开始我们的步骤

第一步:修改项目构建文件

在构建文件 build.sbt 或 Build.scala 中增加下面的内容作为项目的 setting 阅读全文 >>

类别: PlayFramework. 标签: , . 阅读(679). 评论(0) »

如果要给 RESTful 每种 HTTP Method 类型指示一种颜色

RESTful 时需要考虑每种 HTTP Method 操作的业务含义,再也不是 GET 使用 URL, POST 提交表单这样简单的区别。http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 定义有 GET, POST, PUT, HEAD, DELETE, PATCH, OPTIONS, TRACE, CONNECT 九种类型的 HTTP Method。

关于它们可能针对的业务含义就不多说了,而是如果要对每一种操作方法赋予一个颜色应该怎么去对应呢,比如一般 GET 不会有边际效应的操作可以选择绿色,或者蓝色。幸好我也不用多想,这里参考了 Swagger 的颜色方案,它支持除 OPTIONS, TRACE 和 CONNECT 之外的颜色配置,其实我也没用过这两种方法。

从 Play2 Swagger 中截图如下: 阅读全文 >>

类别: Web/JS. 标签: , , . 阅读(298). 评论(0) »

Java 的匿名类初始化块中如何访问同名参数?

因为写过类似下面的一段代码来实始化一个匿名实例

看上面的 buildTest() 方法中的 this.name = name 希望能把方法参数 final String name 中的 name 值赋值给 this.name, 但是无效,this.name = name 是在把自己赋给自己。 阅读全文 >>

类别: Java/JEE. 标签: . 阅读(99). 评论(0) »

代码中如何获得 Java 方法的形式参数名

对于一个 Java 方法 foo(int id, String name); 我们如何能在代码中获得形式参数名 id 和 name 呢?

我们知道通过反射 API Method.getGenericParameterTypes() 可以获得方法的参数类型,但是对于参数名一般就是 arg0, arg1, arg2 ..., 因为 Java 编译时把形式参数名擦除了。所以对完全擦除了形式参数名的字节码应该是没办法了,但我们自己写的类还是有能力去管控的。

对于自己写的类,有两种办法获得形式参数名,分别是

1) Java8 的 -parameters 编译参数,然后用 Java8 新引入的反射 API Parameter

我们先在 Java8 下运行下面的代码 阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(720). 评论(0) »

Mac OS X 下吾所倾爱的三个程序员编辑器

作为编程,讲救效率自然是用各种 IDE,诸如 Idea, Eclipse, NetBeans 等。但平时总也离不开一款趁手的纯文本编辑器,如阅读各种语言的代码,简单编辑。我就经常会用 Sublime 这类工具的列编辑功能,奇怪于为何 IDE 们鲜有提供列编辑的特性的。

在 Mac 下的 TextEdit 其实是一款富文本编辑器,且未给编程带来任何便利。根据本人从开始扑向 Mac OS X 平台起到现在,选择过三款程序编辑器,它们分别是 TextMate, Sublime 和 Atom,前两为付费的,最后一个是免费的。

1. TextMate

最早听说很多人喜欢用它写 Ruby 程序,也不知是不是真的. TextMate 以其卓越的 Bundle 们驰行于天下。只是最近几年来它却裹足不前了,似乎失去了前进的方向,一直稳定在 1.5.11 版本上,2.0 已经 alpha 很久了. 其间好像思考过开源,出现在了 GitHub 上 https://github.com/textmate/textmate,少有维护。 阅读全文 >>

类别: Uncategorized. 标签: , , , . 阅读(640). 评论(0) »

Java 和 Scala 调用变参的方式

Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型。

这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了。

另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元素就是调用集合的 toArray() 方法转换成一个数组传入。

下面看 Java 中对变参方法的调用,参数列表和数组

阅读全文 >>

类别: Java/JEE, Scala. 标签: , , . 阅读(492). 评论(0) »