Scala 系列教程(一):简介

Scala 简介

Scala 是 Scalable Language 的简写,是一门多范式的编程语言

联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala。

Funnel是把函数式编程思想和Petri网相结合的一种编程语言。

Odersky先前的工作是Generic Java和javac(Sun Java编译器)。Java平台的Scala于2003年底/2004年初发布。.NET平台的Scala发布于2004年6月。该语言第二个版本,v2.0,发布于2006年3月。

截至2009年9月,最新版本是版本2.7.6 。Scala 2.8预计的特性包括重写的Scala类库(Scala collections library)、方法的命名参数和默认参数、包对象(package object),以及Continuation。

2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。此外, Wattzon已经公开宣称,其整个平台都已经是基于Scala基础设施编写的。


Scala 特性

面向对象特性

Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。

类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。

函数式编程

Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。

更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。

静态类型

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:

  • 泛型类
  • 协变和逆变
  • 标注
  • 类型参数的上下限约束
  • 把类别和抽象类型作为对象成员
  • 复合类型
  • 引用自己时显式指定类型
  • 视图
  • 多态方法

扩展性

Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:

  • 任何方法可用作前缀或后缀操作符
  • 可以根据预期类型自动构造闭包。

并发性

Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。


谁使用了 Scala

  • 2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。
  • 此外,Wattzon已经公开宣称,其整个平台都已经是基于Scala基础设施编写的。
  • 瑞银集团把Scala用于一般产品中。
  • Coursera把Scala作为服务器语言使用。

Scala Web 框架

以下列出了两个目前比较流行的 Scala 的 Web应用框架:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目 录 译者序 V 第1版序 XVII 前言 XIX 作者简介 XXIII 第1章 基础 A1 1 1.1 Scala解释器 1 1.2 声明值和变量 4 1.3 常用类型 5 1.4 算术和操作符重载 7 1.5 关于方法调用 8 1.6 apply方法 9 1.7 Scaladoc 11 练习 16 第2章 控制结构和函数 A1 19 2.1 条件表达式 20 2.2 语句终止 22 2.3 块表达式和赋值 22 2.4 输入和输出 23 2.5 循环 25 2.6 高级for循环 27 2.7 函数 28 2.8 默认参数和带名参数 L1 29 2.9 变长参数 L1 29 2.10 过程 31 2.11 懒值 L1 31 2.12 异常 32 练习 35 第3章 数组相关操作 A1 39 3.1 定长数组 39 3.2 变长数组:数组缓冲 40 3.3 遍历数组和数组缓冲 41 3.4 数组转换 42 3.5 常用算法 44 3.6 解读Scaladoc 45 3.7 多维数组 47 3.8 与Java的互操作 48 练习 49 第4章 映射和元组 A1 53 4.1 构造映射 53 4.2 获取映射中的值 54 4.3 更新映射中的值 55 4.4 迭代映射 56 4.5 已排序映射 57 4.6 与Java的互操作 57 4.7 元组 58 4.8 拉链操作 59 练习 60 第5章 类 A1 63 5.1 简单类和无参方法 63 5.2 带getter和setter的属性 64 5.3 只带getter的属性 67 5.4 对象私有字段 68 5.5 Bean属性 L1 69 5.6 辅助构造器 71 5.7 主构造器 72 5.8 嵌套类 L175 练习 78 第6章 对象 A1 81 6.1 单例对象 81 6.2 伴生对象 82 6.3 扩展类或特质的对象 83 6.4 apply方法 84 6.5 应用程序对象 85 6.6 枚举 86 练习 87 第7章 包和引入 A1 91 7.1 包 91 7.2 作用域规则 93 7.3 串联式包语句 95 7.4 文件顶部标记法 95 7.5 包对象 96 7.6 包可见性 97 7.7 引入 97 7.8 任何地方都可以声明引入 98 7.9 重命名和隐藏方法 99 7.10 隐式引入 99 练习 100 第8章 继承 A1 103 8.1 扩展类 103 8.2 重写方法 104 8.3 类型检查和转换 105 8.4 受保护字段和方法 106 8.5 类的构造 106 8.6 重写字段 107 8.7 匿名子类 109 8.8 抽象类 109 8.9 抽象字段 110 8.10 构造顺序和提前定义 L3 110 8.11 Scala类继承关系 112 8.12 对象相等性 L1 114 8.13 值类 L2 116 练习 117 第9章 文件和正则表达式 A1 121 9.1 读取行 121 9.2 读取字符 122 9.3 读取词法单元和数字 123 9.4 从URL或其他源读取 124 9.5 读取二进制文件 124 9.6 写入文本文件 124 9.7 访问目录 125 9.8 序列化 125 9.9 进程控制 A2126 9.10 正则表达式 129 9.11 正则表达式组 130 练习 131 第10章 特质 A1135 10.1 为什么没有多重继承 135 10.2 当作接口使用的特质 137 10.3 带有具体实现的特质 138 10.4 带有特质的对象 139 10.5 叠加在一起的特质 140 10.6 在特质中重写抽象方法 141 10.7 当作富接口使用的特质 142 10.8 特质中的具体字段 143 10.9 特质中的抽象字段 144 10.10 特质构造顺序 145 10.11 初始化特质中的字段 147 10.12 扩展类的特质 148 10.13 自身类型 L2 149 10.14 背后发生了什么 151 练习 152 第11章 操作符 A1157 11.1 标识符 157 11.2 中置操作符 158 11.3 一元操作符 159 11.4 赋值操作符 160 11.5 优先级 161 11.6 结合性 162 11.7 apply和update方法 162 11.8 提取器 L2 164 11.9 带单个参数或无参数的提取器 L2166 11

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值