《Scala程序设计》暨Scala简介

原创 2015年11月17日 17:42:02

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Scala程序设计(第2版)

  • 2016-03-07 14:09
  • 13.94MB
  • 下载

Spark程序设计——Scala

1.Java JVM的高层次语言 面向对象+函数式编程 2.静态类型 性能与Java差不多 通常不需要显式写出类型(类型推断机制) 3.与Java结合完好 可直接使用任意Java类,可继承...

Scala程序设计(第2版).pdf

  • 2017-03-31 19:03
  • 2.61MB
  • 下载

scala 程序设计

  • 2015-09-15 09:26
  • 14.72MB
  • 下载

Scala程序设计读书笔记(11-14)

第十一章 与Java互操作 1. 在Scala里使用Scala类  如果在脚本中使用,不需编译被引用的Scala类。如果在编译过的Scala或Java代码中使用就需要编译。指定代码目录为entiti...

Scala程序设计(第2版)

  • 2017-07-19 22:51
  • 2.61MB
  • 下载

读完《Scala程序设计》,随便谈一些想法吧

http://blog.zhaojie.me/2010/08/programming-scala-and-more.html 老赵点滴 - 追求编程之美先做人,再做技术人员,最后...

Scala 程序设计(第2版)

  • 2017-08-15 09:32
  • 14.45MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)