Scala实用指南 - (EPUB全文下载)
文件大小:0.31 mb。
文件格式:epub 格式。
书籍内容:
Scala实用指南
第1章 探索Scala
第2章 体验Scala
第3章 从Java到Scala
第4章 处理对象
第5章 善用类型
第二部分 深入Scala
第6章 函数值和闭包
第7章 特质
第8章 集合
第9章 模式匹配和正则表达式
第10章 处理异常
第11章 递归
第三部分 Scala中的并发编程
第12章 惰性求值和并行集合
第13章 使用Actor编程
第四部分 Scala实战
第14章 和Java进行互操作
第15章 使用Scala创建应用程序
第16章 单元测试
附录A 安装Scala
参考文献
第1章 探索Scala
Scala是一门强大的编程语言:不需要牺牲强大的静态类型检查支持,就可以写出富有表现力而又简洁的代码。
你可以使用Scala构建任意应用程序,小至小工具,大至完整的企业级应用。你可以使用熟悉的面向对象风格编程,也可以随时切换到函数式风格。Scala并不会强迫开发人员使用唯一的风格编程,开发人员可以从自己熟悉的基础开始,并在适应后,利用更多其他特性,从而使自己变得更高产,使自己的程序更高效。
让我们快速探索Scala的一些特性,然后看一看用Scala写成的一个实用示例。
1.1 Scala的特性
Scala是Scalable Language的简称,是一门混合了面向对象编程的函数式编程语言。它由Martin Odersky创造,并于2003年发布了第一个版本。下面是Scala的一些关键特性:
同时支持命令式风格和函数式风格;
纯面向对象;
强制合理的静态类型和类型推断;
简洁而富有表现力;
能和Java无缝地互操作;
基于精小的内核构建;
高度的伸缩性,仅用少量代码就可以创建高性能的应用程序;
具有强大、易用的并发模型。
我们将在本书中细致地学习上面的每一个特性。
1.2 以少胜多
开始接触Scala时,你将会发现Scala与Java的第一个差异是,Scala能用更少的代码做更多的事情。你写的每一行代码都充溢着Scala简洁而强大的优点。你开始使用Scala的关键特性,熟读之后,这些特性便会让你的日常编程变得相当高效——Scala简化了日常编程。
让我们快速浏览一个示例,以了解Scala的强大和优势。在这个例子中,我们将会用到很多特性。即使此刻你并不熟悉Scala语法,也请在阅读的同时输入代码并编译运行。代码写得越多,熟悉得也就越快。
如果你还没有安装Scala,可参考附录A中的步骤。下面是第一个代码示例。
Introduction/TopStock.scala
1 val symbols = List("AMD", "AAPL", "AMZN", "IBM", "ORCL", "MSFT")
2 val year = 2017
3
4 val (topStock, topPrice) =
5 symbols.map { ticker => (ticker, getYearEndClosingPrice(ticker, year)) }
6 .maxBy { stockPrice => stockPrice._2 }
7
8 printf(s"Top stock of $year is $topStock closing at price $$$topPrice")
如果这是你第一次看到Scala代码,不要因语法分心,现阶段应专注于代码的整体结构。
这段代码从指定的股票代码列表中计算出股价最高者。让我们把这段代码拆开来逐步理解。
先看代码的主体部分。在第1行,symbols指向一个不可变的股票代码列表;在第2行,year是一个不可变的值;在第5行和第6行,使用了两个功能强大的专用迭代器——map()函数和maxBy()函数。在Java中,我们习惯用“方法”这个术语来指代类的成员,而“函数”这个术语通常用于指代不属于类的过程(procedure)。然而,在Scala中这两个术语可交换使用。
这两个迭代器分别行使了两种独立的职责。首先,我们使用map()函数遍历股票代码,以创建一个由股票代码及其2017年收盘价格组成的“对”或“元组”为元素的列表。最终结果的元组列表形式为List((股票代码1,价格1),(股票代码2,价格2),...)。
第二个迭代器处理第一个迭代器的结果。maxBy()函数是一个从列表中取出最大值的专用迭代器。因为该列表中的值是元组(对),所以我们需要告诉maxBy()函数如何比较两个值。在maxBy()函数附带的代码块中,我们指定了一个包含两个元素的元组,我们感兴趣的是第二个属性(代码块中的_2)——价格。这段代码十分简洁,但却做了不少事情。图1-1将这些动作进行了可视化。
图1-1
如图1-1所示,map()函数将指定的函数或者操作(在这里是获取价格)应用到每一个股票代码上,并创建一个以股票代码及其价格为元素的结果列表;然后maxBy()函数在结果列表上计算得到价格最高的股票代码。
上述代码没有给出getYearEndClosingPrice()函数,接下来我们来看一看它。
Introduction/TopStock.scala
case class Record(year: Int, month: Int, date: Int, closePrice: BigDecimal)
def getYearEndClosingPrice(symbol: String, year: Int): BigDecimal = {
val url = s"https://raw.githubusercontent.com/ReactivePlatform/" +
s"Pragmatic-Scala-StaticResources/master/src/main/resources/" +
s"stocks/daily/daily_$symbol ............
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » Scala实用指南 - (EPUB全文下载)