为什么要创建开放源码的PlayScala社区?

Play Framework从问世至今已经十个年头了,但是可惜的是这么优秀的框架在国内却鲜为人知。尤其是当Play Framework 2.x发布以后,基于Scala语言重写了整个框架。当Scala和Play Framework相遇,这本该是一段美好的佳话,可结局却是,面对Scala语言更多的人望而却步。 这其实都是因为人们潜意识里对未知事物充满恐惧。但其实Scala没那么可怕,相反了解它一点你会觉得它很可爱。例如很多人看到Scala使用::拼接元素,使用:::拼接列表,例如:

val list1 = List("c", "a", "l", "a")
val list2 = s :: list1 // list2: (s, c, a, l, a)
val list3 = List("p", "l", "a", "y")
val list4 = list3 ::: list2 // list4: (p, l, a, y, s, c, a, l, a)

然后就开始吐槽:WTF,这是什么鬼? 别急,给我一分钟时间,看看能否说服你!

首先你需要了解一个基本概念,在Scala中一切都是方法:

"a" * 3 //等价于: "a".*(3)
2 - 1   //等价于: 2.-(1)

所以没错,你之前看到的::和:::自然也是方法,只不过是为了简洁,省略了.和()。List是由head和tail拼接在一起的递归结构(这种设计在模式匹配时非常方便)。 List的定义可以写成如下形式:

head :: tail

head是首元素,tail是剩余的List。仔细瞧瞧,::看起来是不是很像胶水,将列表的头和尾紧紧地粘在一起,更进一步,:::可以把两个列表粘在一起。这样的代码是不是很简洁,并且富有表达力! 在Scala中,这种简洁的设计比比皆是,例如我们再来看看如何构建一个Map实例:

val map = Map("name" -> "PlayScala社区", "url" -> "http://www.playscala.cn")

感受一下,是不是非常清晰明了。 当然Scala的魅力远不止如此,当你慢慢了解它时,你会慢慢深陷而无法自拔。

讲了那么多,我只想告诉你Scala并不可怕,其实在Play Framework中,你根本就不需要抱着Scala书籍啃完再写代码,PlayScala社区会为你准备一篇30分钟的为Play初学者准备的Scala基础知识,读完你就可以投入Play Framework的怀抱了。

好了,回归正题,那为什么要创建PlayScala社区呢? 主要原因是国内Play Framework的第一手中文学习资料非常稀缺,虽然在网上可以找到一些教程,但是知识的碎片化很严重,并且很多质量较差的文章会影响初学者的认知。 PlayScala社区正是基于这样的原因而诞生的,并且希望能够实现以下几个愿景:

  • PlayScala社区开放源码,希望通过大家的努力,将Play Framework开发的最佳实践全都囊括进来,供大家日常开发参考。
  • 维护一个高质量的『学习』板块,系统而全面地介绍Play Framework开发的相关知识,并将PlayScala社区源码中的最佳实践在这里以文档的形式阐述,你可以认为它是Play Framework官方文档的一个有力补充。
  • 提供一个交流互动平台。PlayScala社区的『分享』和『问答』板块是为『学习』板块服务,这两个板块沉淀下来的知识最终会被收录到『学习』板块。

希望在大家的一起努力下,PlayScala社区(http://www.playscala.cn)可以让更多的人了解并加入Play Framework的开发行列,不断增强Play Framework在国内的影响力。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Cloud Native - 产品级敏捷

从面向对象到函数式编程: 我们正在构建更成熟的关注点隔离生态系统

2016.11.17, 深圳, Ken Fang 在谈论关注点隔离生态系统前, 我想,首先需要谈谈 Procedure Programming, Functio...

19910
来自专栏杨建荣的学习笔记

两道简单的oracle题目(r5笔记第91天)

最近一个朋友想让我帮他一个忙,看似是一个很简单的小忙,就是出两道l题,一道可以难一些,可以通过这道题看出一个开发人员的数据库水平,sql或者pl/sql都可以,...

2638
来自专栏企鹅号快讯

两种编程高手

第一种工程师 给一段复杂的程序,比如有7个局部变量,5层循环和if嵌套,他能赤手空拳上阵,迅速领会程序意图、找到bug,不用借助任何工具甚至纸笔。 给一个复杂的...

1965
来自专栏韩伟的专栏

面向对象的代码风格(下)

面向对象代码的结构 在结构化编程中,代码的结构以分解流程,实现处理方案为核心,代码的分解原色是以实现步骤为主。理解这种结构的代码,我们需要先理解问题的解决方案,...

3504
来自专栏司想君

前端也要学系列:设计模式之策略模式

上边这句话,从字面来看很简单。但是如何在开发过程中去应用,仅凭一个定义依然是一头雾水。以笔者曾经做过的商户进销存系统为例:

652
来自专栏Python小屋

Python实现中英文分词

首先给出昨天文章里最后的小思考题的答案,原文链接为: Python从序列中选择k个不重复元素 既然选择的是不重复的元素,那么试图在[1,100]这样的区间里选...

5738
来自专栏数据小魔方

关于数据地图的几个遗留问题解决方案

今天跟大家分享三个数据地图的遗留问题,包括以前因为技术手段限制无法解决的问题,以及读者吐槽最多的问题。 如何在一个版面上呈现不同行政级别的地理信息; 如何给版面...

3237
来自专栏一个会写诗的程序员的博客

计算机语言是怎样设计出来的

所谓计算机语言只是一个抽象的规范,而编译器是这个规范的实现,它是在这个规范的严格定义下被实现的.

961
来自专栏Python小屋

几段小代码解释Python命令式编程和函数式编程

所谓命令式编程,是指How to do,要通过指令告诉计算机如何一步一步地完成预定任务;而所谓函数式编程,可理解为What to do,只需要通过简单的指令告诉...

2323
来自专栏程序人生

[技术] 谈谈Python

昨天的文章收获了不少有价值的回复。不少人发现了一个大bug,那就是「上帝的归上帝,撒旦的归撒旦」。囧死我了。脑手不同步这病怎么治啊~以后我写完文章争取好好复查一...

3715

扫码关注云+社区