《Scala编程(第3版)》是一份Scala编程语言的教程书。书中包含有很多编程例子,这些例子简便易懂易学,你如果认真读下去此书,本书将以一步一个脚印的方式引导你顺利地获得Scala软件开发的能力。通过阅读此书,你能够获得你所需的,并成为一个多产的Scala程序员。本书还可作为一份语言参考书。Scala语言有一个正式的定义,但是语言的定义是以可读性为代价要求精确性的文档。尽管本书并未涵盖Scala的所有细节,但它在你更好地掌控Scala编程之前,作为一本平易近人的语言参考书已足够全面。
本书由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。本书面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心特性,并能够深入理解Scala这门语言在设计取舍背后的动因。即便是不直接使用Scala或从事一线编程工作的读者,也能从本书学到大量关于函数式和面向对象的编程概念和技巧。
Martin Odersky 是Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是Typesafe, Inc.(已更名为Lightbend)的创始人。他的研究方向是编程语言和系统,更具体地说,就是如何将面向对象和函数式编程风格有机地结合在一起。自2001 年起,他的主要精力集中在设计、实现和改进Scala 上。在此之前,他作为Java 泛型的合作设计者参与了Java 编程语言的开发,同时也是当前javac 参考实现的作者。他还是ACM 院士。Lex Spoon 是Semmle Ltd. 的一名软件工程师。他在EPFL 作为博士后围绕着Scala 开展了两年的工作。他拥有Georgia Tech 的博士学位,在那里他的主攻方向是动态编程语言的静态分析。除Scala 外,他还帮助开发了各类编程语言,包括动态语言Smalltalk、科学计算语言X10,以及支撑Semmle 的逻辑编程语言。他和他的夫人一起生活在Atlanta,他们有两只猫和一只吉娃娃。Bill Venners 是Artima Inc. 的主席,Artima 开发者网站(ww.artima.com)的发行人,以及Escalate Software, LLC 的联合创始人。他著有《Inside theJava Virtual Machine》,这是一本面向程序员讲解Java 平台架构和内部实现原理的书。他在《JavaWorld》杂志上的专栏很受欢迎,主题涵盖Java 内部实现、面向对象的设计和Jini。Bill 从Jini 社区创立之初便十分活跃,领导了Jini 社区的ServiceUI 项目,其API 成为Jini 服务事实上的UI 标准。他还是ScalaTest 的主要开发者和设计者,一个面向Scala 和Java 开发者的开源测试工具。
高宇翔,资深软件开发工程师和系统架构师,同时也是Scala在国内的早期布道者和实践者,曾译有《快学Scala(第2版)》、《快学Scala》(第1版)和《Scala编程》(第1版)等专业书籍。
推荐序
这本书可以说Scala语言里的圣经。很高兴高宇翔将它的第3版也翻译为了中文,对于国内的Scala爱好者来说真的是一个福音。
回想起七八年前,刚开始学习Scala时市场上还没有一本中文版的书。阅读英文版《Programming in Scala》的过程还是蛮费力的,即便我当时已经有很多年的Java编程经验。当时函数式编程的影响还比较弱,主流的编程风格还是命令式的(当然目前也依然是,但主流的编程语言里也开始越来越多地融入了函数式的风格),函数式编程里有很多陌生的概念是之前未曾了解过的,阅读的过程磕磕绊绊。
大概七年前《Scala编程》第1版发行的时候我立即去买了一本,相比英文版阅读速度有极大的提升。后来我陆陆续续地将这本书读过很多遍,每次都能有新的收获。
这七年来Scala的发展势头很猛,语言也在不断地调整,相比之下第1版的部分内容已经陈旧了,第3版的翻译让国内的Scala开发者可以更好地从中摄取知识和经验,即便你是Scala开发的老手也可以重温这本经典著作,一定会有新的体会。
或许对于毫无编程经验的初学者来说这本书并不适合作为你的第一本入门编程书,因为Scala本身是一门集大成者的语言,它多范式的风格将很多优秀的特性集成到了一起,具备很灵活的正交性。无编程经验的初学者未必能把握住。但是对于任何有好奇心的程序员来说,我认为它是你书架上必不可少的一本书。三位作者都是大师级人物,里面看似不经意的只言片语仔细体会的话也别有洞天。
三位大师在书中所说的很多内容,仔细揣摩,你会发现只是冰山一角,背后有更多可以深挖的内容。但这本书的定位也是面向普通的开发人员,大师们也保持得比较克制,不刻意流露一些复杂晦涩的概念,比如本书对流控、for表达式等有极其详尽的描述,但并不刻意提及Monad这样的术语,更多让开发可以去应用和实践它。大师们对偏理论的东西给出了一些线索,如果我们保持好奇心,可以顺着线索去探究编程语言背后庞大的理论体系。
对于一些语言爱好者,这本书也是一个重要的参考,我记得初次读完"组合子解析"(Combinator Parse)这一部分内容时非常震撼,居然可以用极其简短的代码实现一些非常复杂的解析器工作。对于想要实现自己的DSL来说实在是太轻松了。还有模式匹配部分,这本书也是我见过的讲解得最详细的一本书。还有面向对象设计等方面,原本觉得熟稔于心的东西也有必要重新思考一下。
总之,这本书值得反复阅读,带着好奇与思考,你会体验到与大师对话的乐趣。
—— 王宏江 挖财中间件负责人
译者序
这是一本很多人期待了近7年的书。
时光拉回到2010年的夏天,那个时候,Scala还是2.7.x的版本,Java还不支持lambda表达式。因为好奇心的驱使,一群不甘寂寞、不怕折腾的程序员,通过各种方式自学并开始实践Scala编程,慢慢地形成了小圈子。在国内的大小论坛和一些公开的技术会议上,大家也开始陆续听到关于这门编程语言的介绍和讲解。不过,成体系的中文资料非常少。也是在2010年,电子工业出版社引进了由Martin Odersky、Lex Spoon和Bill Venners合著的《Scala编程》中文版权,由黄海旭翻译,他是国内最早的一批Scala爱好者。同为爱好者的我,非常荣幸,参与了这本《Scala编程》部分章节的翻译。
那是一个Scala爆炸式增长的时期,各种开源项目层出不穷(著名的Apache Spark项目就是在这个时候诞生的)。Scala自身的版本迭代演进也很快,关于2.8版本的讨论和开发进展非常鼓舞人心。考虑到2.8相比之前的版本有了比较大的改进,作者们为了更好地普及Scala,《Scala编程》原书于2011年初推出了第2版,覆盖了2.8版本的特性。由于此时中文的《Scala编程》(第1版)刚出版不久,错过了引入更新的最佳时机,包括我在内的很多爱好者,开始了对这本中文书的更新版本的漫长等待。
在等待的过程中,我们共同见证了2012年的《快学Scala》、2014年的《深入理解Scala》、2015年的《Scala编程思想》和2016年的《Scala函数式编程》等多本Scala中文图书的面世。同样是这几年,Java 8正式发布,Scala也公布了2.12版本的线路图,全面拥抱Java 8。2016年5月,《Scala编程》原书第3版正式发售,内容覆盖2.12版本的新特性。当得知电子工业出版社最终确定引进《Scala编程》(第3版)的中文版权并邀请我翻译时,我个人非常激动:终于等来了这次更新。当然了,激动之余是忐忑:一方面翻译需要投入的心力和体力是巨大的;更为重要的是,自己能不能对得起这本书的分量,不要辜负了大家的期望。
说到这本书的分量,除了篇幅之外,我认为最值得一提的,是它不仅全面覆盖了Scala几乎所有的语言特性,还从语言开发者的视角,向我们介绍了这些语言特性和设计取舍背后的原因,以及要解决的问题。这是《Scala编程》跟其他林林总总的Scala图书最大的区别。从工具和工具书的角度,你也许会觉得:编程语言就是拿来干活儿的,一本编程语言的入门书,当然就是要把怎么用讲明白,让我高效地完成手中的工作,其他都是次要的。这里,我想给读者朋友们分享一个我自己的心得:语言除了表达外(让计算机和其他人类明白),更是思维的载体。学习一门编程语言,局部功利的因素当然有,但更多的,是通过这门语言,拓宽你的知识边界。语言是手段,不是目的。所以,不论你是否从事Scala编程工作,希望这本书,都能够带给你不一样的世界和认知。
序
这本书你真是选对了时候!采用Scala的团队和项目越来越多,我们的社区也在不断壮大,Scala相关的职位招聘也十分常见。不论你编程是因为兴趣还是工作(或两者皆有),Scala带给你的愉悦和生产力都难以拒绝。对我而言,编程真正的乐趣来自用简单、精巧的方案解决有意思的挑战。Scala的任务不仅让这件事成为可能,更让它充满乐趣。本书将告诉你Scala是如何做到这些的。
我从Scala 2.5开始接触这门编程语言,很快就被它的语法和概念的规则一致所吸引。当看到类型参数自己不能有类型参数这样的不规则情况出现时,我在2006年一次开发者大会上(战战兢兢地)走向Martin Odersky,毛遂自荐以实习生的身份参与Scala开发,去掉了这个限制。我的修改最终被采纳,Scala从2.7版本开始正式支持类型构造方法的多态(type constructor polymorphism)。从那时起,我参与了其他大部分编译器模块的开发。2012年,我从Martin的实验室读完博士后,加入了Typesafe的Scala小组。1也差不多是在那个时候,Scala发布了2.10,从实用偏学术的环境“毕业”,成长为适用于企业开发环境的一门强大的编程语言。
Scala 2.10是Scala发展过程中的拐点,从快节奏的基于学术研究的功能性版本发布,走向关注简单和加速在企业计算领域的落地。我们将注意力转到那些不会出现在论文中的问题,比如跨大版本的二进制兼容。为了保持稳定性和不断改进、完善平台的热望之间的平衡,我们正在往一个更小的核心类库这个方向努力,让它变得更稳定,同时让整个Scala平台继续进化。为此,我作为Scala技术领导的首个项目,便是在2.11中启动对Scala标准类库的模块化。
为减少变更频率,Typesafe还决定将类库和编译器重构升级安排在不同的版本。这一版《Scala编程》涵盖Scala 2.12版本,该版本是一次编译器升级,支持新的后端以及针对Java 8新特性的优化。为了更好的Java互调用,让用户享受到跟Java一样的来自JVM优化的好处,Scala将函数编译成跟Java 8一样的字节码。Scala的特质现在也同样编译成带有默认方法的Java接口。这两个编译器特性减少了之前版本Scala编译器需要完成的“魔法”,让我们更加贴近Java平台的原生表现,同时提升了编译速度和运行时性能,还让二进制兼容更加平滑!
Java 8平台的这些改进站在Scala的角度非常振奋人心,我们很高兴看到Java也踏上了Scala在十多年前引领的潮流。毫无疑问,Scala提供了更好的函数式编程体验,默认不可变、语句即表达式(在本书里很难找到return语句)、模式匹配、定义处的型变(Java的使用处型变让子函数的定义非常别扭),等等。这么说吧,函数式编程并不仅仅是支持lambda表达式这样的漂亮语法而已。
作为Scala这门编程语言的掌舵人,我们的目标是兼顾核心语言的开发和生态的建设。Scala之所以成功,离不开那些优秀的类库、出色的IDE和工具,离不开我们社区中那些友好的、乐于助人的成员们。我非常享受我在Scala的第一个十年(作为Scala的实现者),跟来自数不清的领域里的Scala程序员们一起感受快乐和鼓舞。
我热爱Scala编程,希望你也一样。代表Scala社区,欢迎你!
—— Andriaan Moors San Francisco, CA 2016年1月14日
引言
本书是Scala编程语言的教程,由直接参与Scala开发的人来编写。我们的目标是让读者通过本书,能够了解和掌握成为高产的Scala程序员需要知道的一切。书中的示例,除标记为2.12的之外,均能通过Scala 2.11.7编译,标记为2.12的示例需要Scala 2.12.0-M3(或更高版本)。
谁读本书
本书主要的目标读
作为一名多年Java开发者,转投Scala的怀抱是一次充满挑战的旅程。《Scala编程(第3版)》这本书,可以说是我这次转型中最得力的助手。它并没有一开始就抛出大量晦涩的概念,而是巧妙地从Java的熟悉领域切入,逐步揭示Scala的独特之处。书中对对象和类的设计,对特质(Traits)的讲解,以及如何利用Scala的简洁语法实现更优雅的代码,都给了我深刻的启发。我特别赞赏作者在解释“协变”与“逆变”时所用的类比,让我这个之前对此概念一知半解的开发者茅塞顿开。此外,书中关于“for推导式”和“隐式转换”的章节,更是让我看到了Scala在简化代码、提升开发效率方面的巨大潜力。我尝试将书中学习到的技巧应用到实际项目中,发现代码量减少了,可读性也大大提高。虽然这本书篇幅不小,但我从不觉得枯燥,因为它始终围绕着“如何写出更好的Scala代码”这个核心展开,实用性极强。
评分我是一名对函数式编程充满好奇的程序员,一直想深入了解Scala。《Scala编程(第3版)》这本书,绝对是我在探索函数式编程世界的过程中最棒的向导。它以一种非常系统化的方式,引导读者逐步深入理解函数式编程的核心思想,比如“不可变性”、“纯函数”以及“高阶函数”。书中对“Option”类型的讲解,让我彻底告别了Java中令人头疼的“NullPointerException”,极大地提升了代码的健壮性。我特别喜欢书中对“集合库”的强大功能的展示,各种转换操作,如map、filter、reduce,用起来非常流畅自然。这本书让我深刻体会到,函数式编程不仅仅是写代码的一种方式,更是一种思考问题、解决问题的哲学。通过学习这本书,我不仅学会了Scala的语法,更重要的是,我培养了一种更加优雅、高效的编程习惯,并且对函数式编程产生了更深层次的理解和热爱。
评分这本书简直是Scala入门者的福音,我之前尝试过好几次学习Scala,但总是半途而废。这次因为工作需要,我抱着试一试的心态入手了《Scala编程(第3版)》。不得不说,这本书的讲解逻辑非常清晰,从最基础的语法、数据类型开始,循序渐进地引入函数式编程的概念,再到并发、分布式等进阶内容。作者的文字功底很扎实,即使是对于像我这样之前没有太多函数式编程经验的读者,也能理解得非常透彻。书中大量的代码示例,都经过了精心设计,既能演示核心概念,又不会过于冗长复杂。我特别喜欢书中对“模式匹配”的讲解,让我终于理解了它在Scala中的强大之处,写代码的效率瞬间提升了好几个档次。而且,书中还穿插了一些实际应用场景的介绍,让我更能体会到Scala的价值所在。我感觉这本书不仅仅是在教我语法,更是在培养我的编程思维。现在,我感觉我对Scala的掌握程度比以前有了质的飞跃,甚至对其他函数式编程语言也产生了浓厚的兴趣。
评分我是一名资深的软件架构师,平时接触的语言和技术很多。《Scala编程(第3版)》这本书,为我提供了一个全新的视角来审视和设计大型系统。书中对Scala在构建高并发、高可伸缩性系统的优势进行了深入剖析,特别是关于“akka”框架的介绍,让我看到了函数式编程在处理分布式复杂性方面的巨大潜力。书中对“Actor模型”的讲解,非常细致,并且通过实际案例展示了如何利用其构建健壮且易于维护的并发应用。此外,书中对“流式处理”和“反应式编程”的讨论,也为我提供了很多在设计大数据处理管道和实时数据分析系统时的宝贵思路。这本书不仅仅是一本语言教程,更像是一本关于如何利用Scala构建现代、高性能系统的设计哲学指南。我经常会翻阅其中的章节,从中汲取灵感,并将其应用到我负责的架构设计工作中。
评分我是一位在校大学生,正在学习软件开发。学校的课程涉及多种编程语言,Scala是其中一门让我印象深刻的。而《Scala编程(第3版)》这本书,更是将我对Scala的理解提升到了一个新的高度。这本书最大的亮点在于其深入浅出的讲解方式,将许多复杂且抽象的概念,比如“代数数据类型”和“类型类”,用非常生动形象的方式呈现出来。我之前对这些概念感到非常困惑,但阅读了这本书之后,我感觉自己终于抓住了它们的精髓。书中丰富的练习题,更是帮助我巩固了所学的知识,并且能及时发现自己的不足之处。我尤其喜欢书中对“Future”和“Promise”在并发编程中的应用讲解,让我对异步编程有了更清晰的认识。这本书不仅让我掌握了Scala的语法,更重要的是,它帮助我建立了一种全新的、更加函数式的编程思维模式。我将这本书推荐给了我的同学们,大家都觉得获益匪浅。
评分此书值得好好学习,很不错资料,值得拥有……
评分一本相当不错的书籍,解释了我平时的很多疑问
评分书很不错,刚开始接触scala,对我帮助很大
评分书质量很不错书质量很不错书质量很不错书质量很不错
评分物美价廉,书本都是正版的
评分好好研究这本书就可以了,2个月搞完。
评分书不错,看了Scala官网的教程后决定深入学习一下,就选了这本书。书的翻译部分地方不是很通顺,字体有点稀疏,导致书略厚,但还是值得买的,虽然很贵
评分满意满意满意满意满意满意满意满意满意
评分翻译的不错,书的知识点比较系统,就是很厚
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有