阿杜的世界

求于至简,归于永恒~~~

《Scala程序设计》暨Scala简介

JVM语言

JVM上的语言越来越多了,从前几年的groovy、Scala和Clojure,现在又听说一门Kotlin。对于前三种语言,groovy算是JVM平台上的动态脚本语言,可以类比Python;Scala以其直逼C++的语言复杂度而出名,但是该语言的流行是因为高并发(akka)和大数据处理(Spark);Clojure是JVM上的Lisp重现,是纯粹的函数式编程语言,它在实时计算(Strom)中承担了一部分责任。

选择Scala

我决定了解Scala的原因是高并发,以及它与Java具备良好的互操作性,因此我试图在将来的项目中引入Scala,让其负责项目的并发处理模块。

Scala令我刮目相看的地方还有,很多语言特性的设计就会让你不自觉使用一些设计模式,或者说根本不需要设计模式。例如:利用Trait可以轻易实现装饰器模式、利用函数值可以轻易实现策略模式等。

在《Scala程序设计》这本书中,作者给出了Scala的几个重要特性:

  • 拥有基于事件的并发模型(从2.10+版本中开始转向akka)
  • 既支持命令式风格,又支持函数式风格
  • 是纯面向对象的
  • 可以很好得与Java混合
  • 它强制使用自适应静态类型
  • 它简洁而有表现力
  • 它构建于一个微内核之上

但是 Scala为什么在国内不太火呢?据说是复杂度太高,黑魔法太多,导致学习曲线过于陡峭,对此我的看法是:Scala是一门密度很高的语言,它的作者好像很懒,还是烦透了Java那过于冗余的代码风格,Scala完全是为了少写代码而设计。我们在使用Scala的一些语法糖的时候,应该兼顾可读性,在不影响可读性的情况下使用Scala的黑魔法

团队在推广使用Scala之前,要首先学习它的语言规范(官方的没有?那就制定团队自己的),这时可以参考Effective Scala

本书主要内容

通过前面的论述,相比你也明白自己是否会选择Scala了,跟随下面的列表,可以大概了解下Scala的具体内容了。

  1. 类型推导:Scala不同于其他静态类型语言,它不要求开发者提供冗余的类型信息,定义变量的时候使用var和val,但是scalac会进行类型推导,检查类型引用是否得当。这点使得Scala既有动态语言的自由,又能在编译时发现不少类型错误。

  2. 函数值和闭包:函数可以当作参数传递给函数,可以从函数中返回,甚至可以在函数中嵌套,这些高阶函数称之为函数值闭包是一种特殊的函数值,闭包中封闭或绑定了在另一个作用域获上下文中定义的变量。

  3. Trait和类型转换:Trait就像一个拥有部分实现的接口,它提供了一个介于单一继承和多重继承的中间地带,我们可以在某个对象实例中混入某些Trait,也可以在某个类的所有实例中混入。通过Trait可以轻易实现设计模式中的装饰器模式。

  4. Scala的容器:Scala提供了常用的容器——List、Map和Set,其中List和Map都有可变(mutable)和不可变(immutable)两种,但是Scala倾向于使用不可变对象。按照函数式编程思想,所有的变量都应该是不可变的,这样可以消除共享变量,乃至消除竞态条件。

  5. 模式匹配和正则表达式:在Scala里,模式匹配仅次于函数值和闭包,是使用第二广泛的特性。

  6. 并发编程:Java不适合并发编程的明证是,仅仅为了这个话题就足够出一本书了——《Java并发编程实战》,在Scala里,最开始是基于事件的模型进行进程间通信,本书介绍了Scala actor模型的概念。现在再学习Scala的并发编程,建议直接学习akka。可以参考:一个超简单的akka actor例子

  7. 与Java互操作:将Scala代码与Java或JVM上其他语言的代码混合使用很容易,Scala和Java一样,都是编译成字节码。通过这一部分的学习,我们可以明白在Java应用中的哪一部分可以使用Scala来提高开发效率,优化软件产品。

  8. 异常处理:Java中的checked Exception强制我们捕获并不关心的异常,所以,一些程序员只放一个空的catch块在那里压制异常,而不是让它们自然传递到正确的地方被处理。即使是没有压制异常,也破坏了Java应用的封装性。在Scala中,我们可以处理关心的异常,忽略其他的异常。


欢迎大家扫码关注微信公众号:我是攻城师,我们一起学习,进步和交流!(duqi_Voice)本公众号的内容是IT技术(Java、虚拟化、大数据等),健身心得和生活感悟,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访! :
duqi_Voice

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duqi_2009/article/details/49890179
文章标签: scala jvm
个人分类: 大数据
上一篇如何保证代码质量
下一篇成长是自己的事——关于“日报系统”的思考
想对作者说点什么? 我来说一句

scala程序设计

2018年01月22日 26.37MB 下载

Scala程序设计 例子 源代码

2017年10月14日 212KB 下载

scala学习资料

2013年12月11日 20.24MB 下载

scala程序设计第三版(最新版)

2018年01月30日 4.12MB 下载

Scala程序设计 第2版 完整高清版

2018年01月14日 12.33MB 下载

Scala程序设计 第2版 .pdf

2017年06月03日 2.18MB 下载

scala程序设计第三版

2018年05月23日 3.52MB 下载

没有更多推荐了,返回首页

关闭
关闭