Scala,发音:skɑːlə。取自于 Scalable(可伸缩、可扩展的)Language简写。
01、基本概念
1)多范式:多种编程方法。目前有四种程序设计方法:面向过程、面向对象、函数式、泛型。
编程范式(programming paradigm(范例、样式、典范)),是指计算机编程的基本风格或典范模式。借用哲学术语,如果说每个编程者都在创造虚拟世界,那么编程范式就是他们置身其中自觉不自觉采用的世界观和方法论。编程是为了解决问题,而解决问题可以有多种视角和思路,其中普适且行之有效的模式被归结为范式。比如常用的“面向对象编程”就是一种范式。由于着眼点和思维方式的不同,相应的范式自然各有侧重和倾向,因此一些范式常用‘oriented’来描述。换言之,每种范式都引导人们带着某种的倾向去分析问题、解决问题,这不就是“导向”吗?如果把一门编程语言比作兵器,它的语法、工具和技巧等是招法,它采用的编程范式则是心法。编程范式是抽象的,必须通过具体的编程语言来体现。它代表的世界观往往体现在语言的核心概念中,代表的方法论往往体现在语言的表达机制中。一种范式可以在不同的语言中实现,一种语言也可以同时支持多种范式。比如,PHP可以面向过程编程,也可以面向对象编程。任何语言在设计时都会倾向某些范式,同时回避某些范式,由此形成了不同的语法特征和语言风格。抽象的编程范式须要通过具体的编程语言来体现。范式的世界观体现在语言的核心概念之中,范式的方法论体现在语言的表达机制中。一种语言的语法和风格与其所支持的编程范式密切相关。
参考:多范式编程语言【详解】
2)可伸缩的语言:
被设计成使用者的需求而成长,可应用在很大范围的编程任务上,从写个小脚本到建立大系统。
语言的可伸缩可以按照“项目大小,就像代码行数”或者“处理能力(像‘需要达到每秒处理 10 万请求’)”来理解,即 性能、(项目)大小的伸缩性。
参考:
可伸缩性:动态和静态程序设计语言
Scala,可扩展的语言
可伸缩性/可扩展性(Scalable/scalability):详解
面向对象编程:
Object Oriented Programming,OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
函数式编程:
Functional Programming,把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
总结:
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在Java虚拟机上,并兼容现有的Java程序。
Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
2、Scala语言学习Outline
1)历史版本 预览
2001,联邦理工学院洛桑(EPFL)的Martin Odersky 基于Funnel的工作开始设计Scala;
2003底/2004初,发布Java平台的Scala;
2004-6,发布.NET平台的Scala;
2006-3,发布Scala语言的第二个版本v2.0;
2009-9,发布2.7.6;
…
2013-1-4,发布2.10.0;
…
2014-4-16,发布2.11.0,会继续支持Java 6;
…
2014-12,发布2.11.4;
…
2017-11,发布2.11.12;
…
2017-1,发布2.12.0,要求Java 8;
参考官方changelog
官方2.11.4、对应java下载安装:JDK 1.6+
Scala 2.11.4 标准库-文档
alpha版本:内部测试版,供开发、测试人员使用;
beta版本:公开测试版,给“部落”/忠实用户测试用;
RC版本(Release Candidate),软件/操作/语言的候选版本;
stable版本:稳定版,最终发行版。
其中一个流行的原因:
Spark,专为大规模数据处理而设计的快速通用的计算引擎。spark它是用Scala编写的。
2)语言特征
① 面向对象特性:每个值都是对象,对象的数据类型、行为 由类和特质描述。类抽象机制的扩展有两种途径:
② 函数式编程:函数也能当成值来使用。
③ 静态类型:具备类型系统,通过编译时检查,保证代码的安全性、一致性
④ 扩展性:提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构。
⑤ 并发性:使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。
Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。
3)学习前奏
Scala首先是OO, Java语法过于冗余, 一种比较平庸的语言, Scala首先做的是简化, 以更为简洁的方式来编写OO, 主要利用‘type inference’能推断出来的, 你就不用写, 但如果仅仅这样, 不如用python
所以Scala象其名字一样, “可伸展的语言”, 它是个大的集市, 它积极吸纳其他语言的优秀的特征, 最重要的就是FP, 你可以使用Scala来写OO, 但它推荐使用FP的方式来写Scala; 还包括Erlang里面的actor模型
所以Scala并不容易学, 因为比较繁杂。
参考:
Scala语法基础
Scala 2.8+ Handbook
Effective Scala