《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中,我们可以处理关心的异常,忽略其他的异常。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

10个实用的但偏执的Java编程技术

在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常。因为,你知道的……任何事情有可能出错,没错,的确如此。 这...

368130
来自专栏nummy

简单工厂模式

简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式。这个模式的基本工作方式: 通过一个工厂来决定创建哪种具体的产品实例。

7010
来自专栏java一日一条

提高代码质量:如何编写函数

函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的。写好一个函数是提高程序代码质量最关键的一步。本文就函数的编写,从函数命名,代码分布,技...

8420
来自专栏java一日一条

提高代码质量:如何编写函数

函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的。写好一个函数是提高程序代码质量最关键的一步。本文就函数的编写,从函数命名,代码分布,技...

11820
来自专栏阿杜的世界

《Java 8实战》阅读笔记(1)

给方法listFiles传递方法引用**File::isHidden**

13040
来自专栏积累沉淀

Java设计模式(三—四)----工厂模式

Java设计模式 工厂模式 一、引言 二、分类 三、简单工厂模式 四、工厂方法模式 五、抽象工厂模式 六、和工厂方法模式区别 七、总...

20050
来自专栏码洞

天下无难试之HashMap面试刁难大全

HashMap的结构无疑是Java面试中出现频率最高的一道题,这个题是如此之常见,应该每个人都会信手拈来。可是就在我经历过的无数【允许我夸张一下】面试当中,能完...

11120
来自专栏程序人生

谈谈面向对象编程

最近写了些和函数式编程的文章,有读者和我讨论函数式编程和面向对象编程的优劣。二者都是很好的编程思想,都在着力解决代码重用的问题,也彼此吸收对方的优点,所以大可不...

442110
来自专栏后端技术探索

常见算法面试题

这几天在网上看到一篇关于算法面试题的博客,归纳的很好,有不少经典的题目,大部分来自《编程珠玑》、《编程之美》、《代码之美》三本书。这里给出书上的解答以及一些思考...

35020
来自专栏程序人生

来来来,咱们元编程入个门

前一篇文章竟然被很多人批「干货太少」 —— 一看你们就没有看过 Rich 他老人家的 Hammock Driven Development(我很久前推荐过滴),...

352100

扫码关注云+社区

领取腾讯云代金券