Scala是一门主要以Java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言。你可以使用Scala编写出更加精简的程序,同时充分利用并发的威力。由于Scala默认运行于JVM之上,因此它可以访问任何Java类库并且与Java框架进行互操作。通过ScalaJS项目,Scala还可以被编译成JavaScript代码,让我们更便捷高效地开发Web应用。
本书从实用角度出发,给出了一份快速的、基于代码的入门指南。Horstmann以“博客文章大小”的篇幅介绍了Scala的概念,让你可以快速地掌握和应用。实际上手的操作,清晰定义的能力层次,从初级到专家级,全程指导。适合有一定的Java编程经验、对Scala感兴趣,并希望尽快掌握Scala核心概念和用法的开发者阅读。
公认绝佳启蒙重磅更新 基于2.12范式|习惯|新特性 紧凑而易于理解的语言入门典范
译 者 序
Scala是一门十分有趣又非常实用的语言,它以JVM为目标环境,将面向对象和函数式编程有机地结合在一起,带来独特的编程体验。
它既有动态语言那样的灵活简洁,同时又保留了静态类型检查带来的安全保障和执行效率,加上其强大的抽象能力,既能处理脚本化的临时任务,又能处理高并发场景下的分布式互联网大数据应用,可谓能缩能伸。
我大约是从2009年开始接触Scala的。在此之前曾做过多年的Java开发,其间也陆陆续续接触过JRuby、Groovy和Python,但没有一门语言能像Scala这样,让我产生持续的兴趣和热情,让我重新感受到学习、思考和解决问题的乐趣。Scala为我开了一扇窗,将我带进了函数式编程的世界,在打破旧有思维模式的同时,让我的整个计算机编程知识体系重组,看待很多技术问题的角度都不一样了。这种感觉,不亚于我前些年接触Linux。
Scala不光是一门值得用心学习的语言,同时也是一门可以直接上手拿来解决实际问题的语言。它跟Java的集成度很高,可以直接使用Java社区大量成熟的技术框架和方案。由于它直接编译成Java字节码,因此我们可以充分利用JVM这个高性能的运行平台为我们提供的便利和保障。
目前国内外已经有很多公司和个人采用Scala来构建其平台和应用。作为JVM上第一个获得广泛成功的非Java语言,Scala正以它独特的魅力吸引着越来越多人的热情投入。
你手里的这本书,出自《Java核心技术》(Core Java)的作者Cay S. Horstmann。
书中每一章的篇幅都不长,娓娓道来,沁人心脾,适合有一定经验的Java程序员阅读。书中几乎所有Scala相关的核心内容都有涉及,由浅入深,深入浅出,非常适合读者快速上手。本书是原著第2版,针对Scala 2.12版进行了全面更新。
当然了,如果你想要用好Scala,想把它发挥到更高的层次,基本功必须扎实。这本书讲的都是基本招式,看似平实无华,实则招招受用。对于一线开发人员,本书非常值得放在案头反复揣摩练习。
广大Scala爱好者们,这是为你们准备的书,希望你们也和我一样,在Scala中找到乐趣,找到归属,你们是我完成本书翻译的动力。
感谢Martin Odersky和他的团队,为我们带来如此美妙的编程语言;感谢电子工业出版社、张春雨编辑第一时间从国外引进这本书的第2版;感谢编辑团队和其他幕后工作者的辛勤劳动;最后还要感谢我的家人,感谢你们的理解和支持。
在本书的翻译过程中,译者虽已尽力将原著的真实意思以符合中文习惯的方式呈现给大家,但毕竟能力有限,问题和疏漏在所难免,恳请各位读者批评指正,联系邮箱:gaoyuxiang.scala@gmail.com。
高宇翔
2017年于上海
第1版序
几年前我和Cay Horstmann见面,他告诉我Scala需要一本更好的入门书。当时我自己的书才刚出来,因此我当然要问他觉得我那本书有哪里不好。他回答说,书很不错,但就是太长了,他的学生们是不会有耐心读完800页的《Scala编程》(Programming in Scala)的。我认为他说得有一定道理。然后他就开始着力改变这个状况,于是就有了这本《快学Scala》。
看到这本书终于完成我非常高兴,因为它真切地印证了书名所表达的意思。这是一部快速实用的Scala入门指引,详细解释了Scala到底有什么特别,与Java的区别在哪里,如何克服学习中常见的困难,以及如何编写优质的Scala代码。
Scala是一门具备高度表达能力且十分灵活的语言。它让类库编写者们可以使用非常精巧的抽象,以便类库的使用者们可以简单地、直观地表达自己。因此,根据代码种类的不同,它可以很简单,也可以很复杂。
一年前,我曾试着通过一组用于Scala及其标准类库的层级定义来对这个问题做一些澄清。首先按应用程序开发人员和类库设计者分开,然后各自又分为三个层级。初级的内容可以很快被掌握并且足够用于产出实际代码。中级的内容可以使程序变得更加精简、更加函数式,并且可以让类库使用起来更加灵活。而最高级的内容是为那些解决特定问题、处理特定任务的专家准备的。当时我这样写道:
我希望这个层级划分有助于让Scala的初学者决定以怎样的顺序来学习,并且能够给教师和书籍作者一些建议,以怎样的顺序来呈现相关内容。
Cay的书是第一本系统化地采纳这个想法的Scala入门书。每一章都相应地打上了层级标签,让你一目了然地知道该章的难易程度,以及它是面向类库编写者的还是面向应用程序开发人员的。
如你所预期的那样,开始的章节是对基本的Scala功能的快速介绍。不过本书并不就此收手,接下来还涵盖了许多“高级”概念,直到最后非常高端的内容,这些内容通常并不会出现在编程语言的入门指引当中,比如如何编写解析器组合子,如何使用定界延续,等等。Cay令人钦佩地做到了让哪怕是最高级的概念理解起来也那么简单明了。
我非常喜欢《快学Scala》的构思,于是向Cay和他的编辑Greg Doench提出能否将本书基础章节部分作为免费资料放在Typesafe网站上供大家下载。他们大方地答应了我的请求,对此我深表感谢。这样一来,每个人都可以很快地获取到这份在我看来是目前市面上最紧凑的Scala入门指南。
Martin Odersky
2012年1月
前 言
Java和C++的进化速度已经大不如前,那些乐于使用更现代的语言特性的程序员们正在将眼光移向他处。Scala是一个很有吸引力的选择;事实上,在我看来,对于想要提升生产效率的程序员而言,Scala是最具吸引力的一个。Scala的语法十分简洁,相比Java的样板代码,Scala让人耳目一新。Scala运行于Java虚拟机之上,让我们可以使用海量现成的类库和工具。Scala并非只以Java虚拟机作为目标平台。ScalaJS项目产出的是JavaScript代码,让你用一门不是JavaScript的语言同时编写Web应用的服务端和客户端。它在拥抱函数式编程的同时,并没有废弃面向对象,使你得以逐步了解和学习一种全新的编程范式。Scala解释器让你快速运行实验代码,这使得学习Scala的过程颇为轻松惬意。最后,同时也是很重要的一点是,Scala是静态类型的,编译器能够帮助我们找出大部分错误,这样就不至于要等到程序运行起来以后才发现(或未发现)这些错误,造成时间上的浪费。
本书是写给那些对于立即开始Scala编程有急切渴望的读者的。我假定你懂Java、C#或C++,并且我也不会去解释变量、循环或类这些基本概念。我不去穷举Scala的所有特性,不会宣传某一种范式比另一种更优越,也不会用冗长的、过于机巧的示例来“折磨”你。与此相反,你将会以紧凑的篇幅得到你想要的信息,可以根据需要选择阅读和复习。
Scala是一门内容很丰富的语言,不过你并不需要知道它的所有细节,就已经可以有效地使用了。Scala的创始人Martin Odersky对应用程序开发工程师和类库设计人员所需的专业知识技能的层级进行了定义。
对每一章(偶尔也针对特定的小节),我都标出了所需的经验层级,大致的递进顺序是: A1 、L1 、A2 、L2 、A3 、L3 。就算你不打算设计自己的类库,知道Scala向类库设计人员提供了哪些工具对于更有效地使用类库也会大有裨益。
这是本书的第2版,针对Scala 2.12做了全面的更新。我添加了对新近的Scala功能特性如字符串插值、动态调用、隐式类和future的介绍,并更新了所有章节来反映当下的Scala用法。
我希望你通过本书享受到学习Scala的乐趣。如果你发现了错误或者有任何改进建议,请访问http://horstmann.com/scala并留言。在那里,你也能找到指向包含本书全部代码示例的打包文件的链接。
在此特别感谢Dmitry Kirsanov和Alina Kirsanova将我的手稿从XHTML转换成如此漂亮的排版样式,让我可以将注意力集中在内容而不是在格式调整上。每个作者都应享受这种待遇!
参与本书审稿的人员有:Adrian Cumiskey、Mike Davis、Rob Dickens、Steve Haines、Susan Potter、Daniel Sobral、Craig Tataryn、David Walend和William Wheeler。
非常感谢你们的评价和建议!
最后,一如既往,感谢我的编辑Greg Doench,感谢他对我撰写本书的鼓励和贯穿于整个过程当中的洞察力。
Cay S. Horstmann
2016年于旧金山
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
■ 提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
■ 交流互动:在页面下方读者评论处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/31995
页面入口:http://www.broadview.com.cn/book/31995不对,应该为http://www.broadview.com.cn/book/4824
SpringOps 应该为StringOps
or (c 应该为 for (c
“>>>[“] 应该为 “>>>[“)
“>>>[“] 应该为 “>>>[“)