前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Scala程序设计》阅读书摘

《Scala程序设计》阅读书摘

作者头像
阿杜
发布2018-08-06 14:17:49
8360
发布2018-08-06 14:17:49
举报

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中,我们可以处理关心的异常,忽略其他的异常。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015.12.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM语言
  • 选择Scala
  • 本书主要内容
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档