当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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在国内的影响力。

转载于:https://my.oschina.net/joymufeng/blog/1505420

相关文章:

  • 关于 TCP/IP,必知必会的十个问题
  • OSStatus code 查询
  • TCP协议中FLAG的含义
  • TypeScript学习笔记(六):泛型
  • Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关
  • Android零基础入门第11节:简单几步带你飞,运行Android Studio工程
  • java中你确定用对单例了吗?
  • 深入分析Sleep(0)与Sleep(1)的区别
  • swift3.0常用操作包含删除字符串(string),更换字符串,插入字符串
  • 第21章 RTX 低功耗之睡眠模式
  • Spring思维导图(AOP篇)
  • layer close 关闭层IE9-浏览器崩溃问题解决
  • Java-static
  • 克隆用户过狗提权
  • Linux中如何查看显卡硬件信息
  • Babel配置的不完全指南
  •  D - 粉碎叛乱F - 其他起义
  • happypack两次报错的问题
  • iOS | NSProxy
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript类型识别
  • nginx 负载服务器优化
  • PermissionScope Swift4 兼容问题
  • Python - 闭包Closure
  • Selenium实战教程系列(二)---元素定位
  • Service Worker
  • 从PHP迁移至Golang - 基础篇
  • 订阅Forge Viewer所有的事件
  • 简单数学运算程序(不定期更新)
  • 跨域
  • 一起参Ember.js讨论、问答社区。
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 阿里云重庆大学大数据训练营落地分享
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​批处理文件中的errorlevel用法
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (2)STL算法之元素计数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二十四)Flask之flask-session组件
  • (附源码)php新闻发布平台 毕业设计 141646
  • (理论篇)httpmoudle和httphandler一览
  • (十五)使用Nexus创建Maven私服
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)LINQ之路
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET Micro Framework初体验(二)
  • .net 反编译_.net反编译的相关问题
  • .NET 反射的使用
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • ::前边啥也没有
  • @JoinTable会自动删除关联表的数据