编辑推荐

  大数据时代掌握Scala编程的基础知识和核心技术的入门指南

  程序设计大师BruceEckel继《Java编程思想》之后新力作

  《Java编程思想》作者BruceEckel全新编程指南,学习Scala编程的简明教程!

??

内容简介

  《Scala编程思想(原书第2版)》介绍Scala的基础特性,采用短小精悍的“原子”解构Scala语言的元素和方法。一个“原子”即为一个小型知识点,通过代码示例引导读者逐步领悟Scala的要义,结合练习鼓励读者在实践中读懂并写出地道的Scala代码。访问下载练习解答和代码示例,还可了解《Scala编程思想(原书第2版)》英文版的全新动态。
  《Scala编程思想(原书第2版)》无需编程背景知识,适合Scala初学者阅读。同时,《Scala编程思想(原书第2版)》也为有经验的程序员提供了“快车道”,共同探索编程语言未来的模样。

作者简介

  BruceEckel,获得多项大奖的《Java编程思想》《C++编程思想》及其他众多著作的作者。他在编程世界中耕耘了30余载——著书、讲座、举办研讨会和提供咨询。

  DianneMarsh,她从2008年以来一直在使用和研究Scala。自1987年开始从事编程工作起,熟知的语言从C到C#、从Python到Java,但她发现Scala出类拔萃且妙趣横生。

  陈昊鹏,上海交通大学软件学院副教授,从事软件工程和分布式计算方面的研究,译作有《Java编程思想》《Java核心技术·卷Ⅱ》《Java编程语言》等。

目录

编辑器/1
shell/2
安装(Windows)/5
安装(Mac)/9
安装(Linux)/13
运行Scala/19
注释/20
编写脚本/21
值/22
数据类型/24
变量/27
表达式/29
条件表达式/31
计算顺序/34
组合表达式/37
总结1/41
方法/45
类和对象/50
ScalaDoc/54
创建类/55
类中的方法/58
导入和包/61
测试/65
域/70
for循环/72
Vector/75
更多的条件表达式/79
总结2/82
模式匹配/91
类参数/94
具名参数和缺省参数/98
重载/101
构造器/104
辅助构造器/108
类的练习/110
case类/112
字符串插值/115
参数化类型/117
作为对象的函数/120
map和reduce/125
推导/128
基于类型的模式匹配/133
基于case类的模式匹配/136
简洁性/139
风格拾遗/144
地道的Scala/147
定义操作符/148
自动字符串转换/151
元组/153
伴随对象/157
继承/163
基类初始化/166
覆盖方法/170
枚举/173
抽象类/176
特征/179
统一访问方式和setter/185
衔接Java/187
应用/190
浅尝反射/192
多态/194
组合/200
使用特征/206
标记特征和case对象/209
类型参数限制/211
使用特征构建系统/214
序列/219
列表和递归/223
将序列与zip相结合/226
集/229
映射表/232
引用和可修改性/235
使用元组的模式匹配/238
用异常进行错误处理/242
构造器和异常/247
用Either进行错误报告/250
用Option对“非任何值”
进行处理/255
用Try来转换异常/261
定制错误报告机制/269
按契约设计/276
记日志/279
扩展方法/282
使用类型类的可扩展系统/285
接下来如何深入学习/290
附录A AtomicTest/291
附录B 从Java中调用
Scala/293
索引/295

前言/序言

  Java、C#、C++等编程语言当今仍然占据着绝对优势的市场份额,但是求知欲和探索欲驱使人们不断思考未来的语言应该是什么样的。人们给出了很多答案,Scala就是其中之一。很多人都听说过Scala代码比Java代码更简洁且更灵活,甚至有些Scala程序员宣称:“完成相同的功能,我写的Scala程序只有你写的Java程序的三分之一的代码量。”对此,人们在惊讶之余非常想亲眼看看Scala到底多么神奇。
  《Scala编程思想(原书第2版)》是了解Scala基础特性的绝佳入门读本,内容结构和文字风格简洁流畅,既适合毫无背景的初学者,又适合经验丰富的程序员,是以Scala的特点编写的介绍Scala语言的优秀著作。《Scala编程思想(原书第2版)》配套网站(www.AtomicScala.com)还提供了大量实用材料,包括练习解答和相关活动信息。
  Scala语言本身博大精深,作为初级读本,《Scala编程思想(原书第2版)》只涵盖了基础特性,并未涉及高级特性(例如函数式编程等内容)。即便如此,读者也能在阅读《Scala编程思想(原书第2版)》后顺利开启面向对象编程之旅,并且为了解Scala的高级特性做好准备。
  在翻译《Scala编程思想(原书第2版)》时,译者尽力做到在确保准确的情况下使译文更加流畅且更符合中文表达习惯,但由于水平有限,离“信达雅”的标准可能还有差距,欢迎读者批评指正。
  陈昊鹏
  2015年8月
  这应该是你的第一本有关Scala的书,而不是最后一本。我们呈现的内容将足以使你熟知这门语言并感到得心应手—你将掌握这门语言,但还不足以成为专家。通过阅读《Scala编程思想(原书第2版)》,你将编写出有用的Scala代码,但是不必追求读懂碰到的所有Scala代码。
  读完《Scala编程思想(原书第2版)》后,你就可以阅读更加复杂的Scala书籍了,在《Scala编程思想(原书第2版)》的末尾我们推荐了几本。
  这是一本为新手准备的专用书籍。之所以称为“新手”,是因为《Scala编程思想(原书第2版)》并不要求你之前具备编程知识,而“专用”是因为书中包含丰富的内容,足够自学成才。我们给出了有关编程和Scala的基础知识,但是并没有用这门语言博大精深的完整知识体系来淹没你。
  属于初学者的程序员应该将其看作一个游戏:你可以通关,但是需要一路解决多个难题。有经验的程序员能够快速阅读《Scala编程思想(原书第2版)》,并且发现需要慢下来留心阅读的地方。
  原子概念
  所有编程语言都是由各种特性构成的,运用这些特性可以产生运行结果。Scala非常强大:它不仅有更多特性,而且可以通过大量不同的方式来表示这些特性。如果我们将这些特性和表示方式一股脑地抛给你,你肯定会觉得Scala“过于复杂”,从而放弃学习。
  然而不必如此。
  如果了解这些特性,那么你就可以阅读任何Scala代码,并且梳理出其中的含义。事实上,对于一整页的Scala代码,如果用其他语言编写具有相同效果的代码则需要许多页,因而理解Scala代码显得更容易,因为只需“一页”就可以看到所有代码。
  为了避免揠苗助长,我们会遵循下面的原则循循善诱地教授这门语言:
  1.积跬步以至千里。我们抛弃了将每一章都编写成长篇大论的做法,取得代之的是将每一小步都表示成“原子性”概念,或者简称“原子”,它们看起来就像微缩的章。典型的原子包括一个或多个可运行的小型代码段以及它们产生的输出。我们将描述哪些特性是Scala的创新和独到之处,并且努力做到每个原子只表示一个新概念。
  2.无任何前向引用。对作者而言,这种描述方式很有用:“这些特性将在后续章节中进行阐述。”这会使读者发懵,所以我们不会这么做。
  3.无任何对其他语言的引用。我们几乎从来不引用其他语言(只在绝对必要时才引用)。我们不知道你已经掌握了哪些语言(如果有的话),如果我们用某种你不理解的语言的某个特性来进行类比,那么肯定会挫伤你的积极性。
  4.事实胜于雄辩。与纯粹用文字来描述特性不同的是,我们更喜欢用示例和输出来说明特性。通过阅读代码来了解特性显然更好。
  5.实践出真知。我们设法首先展示语言的机制,然后再解释为什么会有这些特性。这种做法似乎落后于“传统”教学方式,但往往更有效。
  我们努力工作以期创造最好的学习体验,但是仍然要提醒你:为了易于理解,我们偶尔会过度简化或抽象某个概念,而你之后可能会发现这个概念不完全正确。我们并非经常这么做,凡是这么做都是经过深思熟虑的。我们相信这样做有助于使现在的学习更轻松,并且一旦你了解了详情,就会适应这种方式。
  交叉引用
  当我们引用《Scala编程思想(原书第2版)》中的另一个原子时,会为该原子加上底纹,例如,欢迎阅读原子类和对象。
  如何使用《Scala编程思想(原书第2版)
  《Scala编程思想(原书第2版)》的读者对象既包括编程初学者,也包括已经学会使用其他语言编程的程序员。
  初学者。从前言开始,像读其他书一样顺序阅读每个原子,包括“总结”原子,总结内容有助于巩固所学知识。
  有经验的程序员。因为你已经理解了编程的基础知识,所以我们为你准备了“快车道”:
  1.阅读前言。
  2.按照相应原子中介绍的方式在你的平台上安装必要的软件。我们假设你已经安装过某种程序编辑器,并且会使用shell,否则,请阅读编辑器和shell。
  3.阅读运行Scala和编写脚本。
  4.跳到总结1,阅读其内容并解答其中的练习。
  5.跳到总结2,阅读其内容并解答其中的练习。
  6.至此,从模式匹配开始,继续按照正常方式通读《Scala编程思想(原书第2版)》。
  第2版中的修订
  第2版中的修订大多是源于bug报告的小修改和订正,以及针对Scala2.11版本而做的必要更新。另外还对相当数量的拖沓冗长的行文进行了精简。如果你买过第1版的电子书,那么将会自动获得第2版的更新。如果你买过第1版的纸质书,那么可以在AtomicScala.com网站上找到第2版中的所有修订。
  《Scala编程思想(原书第2版)》样章
  为了更好地介绍《Scala编程思想(原书第2版)》并引领你进入Scala的世界,我们发布了免费的电子版样章,你可以在AtomicScala.com上找到。我们尽力让样章足够长,使得它自身就非常有用。
  无论是纸质版还是电子版,《Scala编程思想(原书第2版)》完整版都是需要付费的。如果你喜欢免费样章中所呈现的内容,那么请支持我们,通过付费帮助我们继续完成更多工作。我们希望《Scala编程思想(原书第2版)》对你有所帮助,并且非常感激你的资助。
  在互联网时代,控制任何信息看似都是绝无可能的。你也许能够在许多地方找到《Scala编程思想(原书第2版)》的完整电子版,如果你此刻无力支付,因而从某个网站上下载了它,那么就请你“将知识传播出去”。例如,在你学会Scala之后帮助他人学习Scala,或者只是以急他人所急的方式帮助他们。也许在未来的某天,风光起来的你会乐于慷慨解囊。
  示例代码和练习解答
  这些都可以在AtomicScala.com下载。
  咨询
  BruceEckel认为咨询要想上境界,其基础是理解团队或组织的特定需求和能力,并基于这种理解发现能够以最佳方式将你扶上马走一程的工具和技术。这包括在多个领域内的指导和协助:帮助你分析计划,评估能力和风险,辅助设计,工具评估和选择,语言培训,项目引导研讨会,开发过程中的指导性访问,指导性的代码走查,以及特定主题的研究和现场培训。要想了解Bruce是否能够为你的需求提供合适的咨询服务,请通过MindviewInc@gmail.com联系他。
  会议
  Bruce组织了一个空间开放的会议JavaPosseRoundup(现已成为一个冬季技术论坛,www.WinterTechForum.com),以及另一个针对Scala的同样秉承空间开放原则的会议ScalaSummit(www.ScalaSummit.com)。Dianne组织了AnnArborScalaEnthusiastsgroup,同时她还是CodeMash的组织者之一。加入AtomicScala.com邮件列表,就会收到我们的活动和演讲通知。
  支持我们
  撰写《Scala编程思想(原书第2版)》及其各类辅助材料可是一个大项目,这花费了我们大量的时间和精力。如果你喜欢《Scala编程思想(原书第2版)》,并且想看到更多类似的精品,那么就请支持我们吧:
  写博客或发tweet等,并转发给你的好友。这是一种草根式的拓展市场行为,因此你所做的任何事都会有助于《Scala编程思想(原书第2版)》的推广。
  在AtomicScala.com购买《Scala编程思想(原书第2版)》的电子版或纸质版。
  在AtomicScala.com浏览其他辅助产品或App。
  关于我们
  BruceEckel是获得多项大奖的《ThinkinginJava》和《ThinkinginC++》的作者,他还创作过大量有关计算机编程的其他书籍。他在计算机产业界已经耕耘了30余载,不断地经历着这样的循环:感到挫败,尝试退出,然后诸如Scala这样的新生事物产生,带来新的希望,又将他拉回老本行。他在世界各地做了成百上千场报告,并且乐于参加像冬季技术论坛和ScalaSummit之类的各种会议和活动。Bruce住在科罗拉多州的CrestedButte,他经常在当地社区剧院中表演。尽管他此生可能最多也就是个中级滑雪健将或山地车手,但是他认为这些活动和画抽象画一样,都是人生中不可或缺的部分。Bruce拥有应用物理专业的学士学位以及计算机工程专业的硕士学位。他目前正在学习组织动力学,以期找到组织公司的新方式,使一起工作变成一种乐趣。你可以在www.reinventing-business.com上阅读他在组织方面的奋斗事迹,而他在编程方面的工作可以在www.mindviewinc.com上找到。
  DianneMarsh是Netflix云工具工程部门(EngineeringforCloudTools)的主管。她是SRTSolutions的创始人之一,这是一家客户软件开发公司,在2013年被出售之前,公司一直由她负责运营。她的专长是编程和技术,包括制造、基因组学决策支持和实时处理应用系统。Dianne在职业生涯伊始使用的是C,后来喜欢的语言包括C++、Java和C#,目前她非常喜欢Scala。Dianne协助组织了CodeMash(www.codemash.org),这是一个全部由志愿者构成的开发者大会,使用各种语言的开发者齐聚一堂并彼此学习。她还是AnnArborHands-OnMuseum的董事会成员。她积极参加本地用户组,并且主持着其中的好几个。她在密歇根技术大学(MichiganTechnologicalUniversity)获得计算机科学硕士学位。Dianne嫁给了她最好的朋友,养育了两个可爱的孩子。就是她说服了Bruce撰写《Scala编程思想(原书第2版)》。
  致谢
  我们感谢ProgrammingSummerCamp2011的参与者对《Scala编程思想(原书第2版)》的早期评论和参与,特别感谢SteveHarley、AlfKristianStoyle、AndrewHarmel-Law、AlGorup、JoelNeely和JamesWard,他们都慷慨地奉献了自己的时间和评论。还要感谢许多对《Scala编程思想(原书第2版)》GoogleDocs格式进行评阅的人。
  Bruce要感谢JoshSuereth为《Scala编程思想(原书第2版)》提供的所有技术帮助。还要感谢CrestedButte的RumorsCoffeeandTeaHouse和TownieBooks,他在撰写《Scala编程思想(原书第2版)》时在这两家店里花了不少时间。还有BlissChiropractic的Mimi和Jay,在写作过程中,他们总是定期帮他把事情都理顺。
  Dianne要感谢她在SRT的业务搭档BillWagner,以及SRTSolutions的雇员,因为她占用了他们工作之外的时间。她还要感谢Bruce,因为他同意与她一起撰写《Scala编程思想(原书第2版)》,并在此过程中一直对她不离不弃,尽管他肯定已经因她所犯的被动语态和标点符号错误而身心俱疲。她还要特别感谢丈夫TomSosnowski,感谢他在写作过程中给予的宽容和鼓励。
  最后,感谢BillVenners和DickWall,他们的“通向Scala的天梯”(StairwaytoScala)课程帮助我们巩固了对这门语言的理解。


其他推荐