Table Of ContentA comprehensive step-by-step guide
Programming in
Scala
Third Edition
Updated for Scala 2.12
Martin Odersky
Lex Spoon
artima Cover · Overview · Contents · DisBcuilsls V· Seunggneestr·sGlossary · Index
Praise for the earlier editions of
Programming in Scala
Programming in Scala is probably one of the best programming books
I’ve ever read. I like the writing style, the brevity, and the thorough explana-
tions. The book seems to answer every question as it enters my mind—it’s
always one step ahead of me. The authors don’t just give you some code
and take things for granted. They give you the meat so you really understand
what’s going on. I really like that.
- Ken Egervari, Chief Software Architect
Programming in Scala is clearly written, thorough, and easy to follow.
It has great examples and useful tips throughout. It has enabled our organi-
zation to ramp up on the Scala language quickly and efficiently. This book
is great for any programmer who is trying to wrap their head around the
flexibility and elegance of the Scala language.
- Larry Morroni, Owner, Morroni Technologies, Inc.
The Programming in Scala book serves as an excellent tutorial to the
Scala language. Working through the book, it flows well with each chapter
building on concepts and examples described in earlier ones. The book takes
care to explain the language constructs in depth, often providing examples
of how the language differs from Java. As well as the main language, there
is also some coverage of libraries such as containers and actors.
I have found the book really easy to work through, and it is probably
one of the better written technical books I have read recently. I really would
recommend this book to any programmer wanting to find out more about the
Scala language.
- Matthew Todd
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
iii
I am amazed by the effort undertaken by the authors of Programming in
Scala. This book is an invaluable guide to what I like to call Scala the Plat-
form: a vehicle to better coding, a constant inspiration for scalable software
design and implementation. If only I had Scala in its present mature state
and this book on my desk back in 2003, when co-designing and implement-
ing parts of the Athens 2004 Olympic Games Portal infrastructure!
To all readers: No matter what your programming background is, I feel
you will find programming in Scala liberating and this book will be a loyal
friend in the journey.
- Christos KK Loverdos, Software Consultant, Researcher
Programming in Scala is a superb in-depth introduction to Scala, and it’s
also an excellent reference. I’d say that it occupies a prominent place on my
bookshelf, except that I’m still carrying it around with me nearly everywhere
I go.
- Brian Clapper, President, ArdenTex, Inc.
Great book, well written with thoughtful examples. I would recommend
it to both seasoned programmers and newbies.
- Howard Lovatt
The book Programming in Scala is not only about how, but more im-
portantly, why to develop programs in this new programming language. The
book’s pragmatic approach in introducing the power of combining object-
oriented and functional programming leaves the reader without any doubts
as to what Scala really is.
- Dr. Ervin Varga, CEO/founder, EXPRO I.T. Consulting
This is a great introduction to functional programming for OO program-
mers. Learning about FP was my main goal, but I also got acquainted with
some nice Scala surprises like case classes and pattern matching. Scala is an
intriguing language and this book covers it well.
There’s always a fine line to walk in a language introduction book be-
tween giving too much or not enough information. I find Programming in
Scala to achieve a perfect balance.
- Jeff Heon, Programmer Analyst
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
iv
I bought an early electronic version of the Programming in Scala book,
by Odersky, Spoon, and Venners, and I was immediately a fan. In addition
to the fact that it contains the most comprehensive information about the
language, there are a few key features of the electronic format that impressed
me. I have never seen links used as well in a PDF, not just for bookmarks,
but also providing active links from the table of contents and index. I don’t
know why more authors don’t use this feature, because it’s really a joy for
the reader. Another feature which I was impressed with was links to the
forums (“Discuss”) and a way to send comments (“Suggest”) to the authors
via email. The comments feature by itself isn’t all that uncommon, but the
simple inclusion of a page number in what is generated to send to the authors
is valuable for both the authors and readers. I contributed more comments
than I would have if the process would have been more arduous.
Read Programming in Scala for the content, but if you’re reading the
electronic version, definitely take advantage of the digital features that the
authors took the care to build in!
- Dianne Marsh, Founder/Software Consultant, SRT Solutions
Lucidity and technical completeness are hallmarks of any well-written
book, and I congratulate Martin Odersky, Lex Spoon, and Bill Venners on a
job indeed very well done! The Programming in Scala book starts by setting
a strong foundation with the basic concepts and ramps up the user to an
intermediate level & beyond. This book is certainly a must buy for anyone
aspiring to learn Scala.
- Jagan Nambi, Enterprise Architecture, GMAC Financial Services
Programming in Scala is a pleasure to read. This is one of those well-
written technical books that provide deep and comprehensive coverage of the
subject in an exceptionally concise and elegant manner.
The book is organized in a very natural and logical way. It is equally well
suited for a curious technologist who just wants to stay on top of the current
trends and a professional seeking deep understanding of the language core
features and its design rationales. I highly recommend it to all interested
in functional programming in general. For Scala developers, this book is
unconditionally a must-read.
- Igor Khlystov, Software Architect/Lead Programmer, Greystone Inc.
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
v
The book Programming in Scala outright oozes the huge amount of hard
work that has gone into it. I’ve never read a tutorial-style book before that
accomplishes to be introductory yet comprehensive: in their (misguided) at-
tempt to be approachable and not “confuse” the reader, most tutorials silently
ignore aspects of a subject that are too advanced for the current discussion.
This leaves a very bad taste, as one can never be sure as to the understanding
one has achieved. There is always some residual “magic” that hasn’t been
explained and cannot be judged at all by the reader. This book never does
that, it never takes anything for granted: every detail is either sufficiently
explained or a reference to a later explanation is given. Indeed, the text is
extensively cross-referenced and indexed, so that forming a complete picture
of a complex topic is relatively easy.
- Gerald Loeffler, Enterprise Java Architect
Programming in Scala by Martin Odersky, Lex Spoon, and Bill Venners:
in times where good programming books are rare, this excellent introduction
for intermediate programmers really stands out. You’ll find everything here
you need to learn this promising language.
- Christian Neukirchen
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
Programming in Scala
Third Edition
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
Programming in Scala
Third Edition
Martin Odersky, Lex Spoon, Bill Venners
ARTIMA PRESS
WALNUT CREEK, CALIFORNIA
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
artima
viii
Programming in Scala
Third Edition
Martin Odersky is the creator of the Scala language and a professor at EPFL in
Lausanne, Switzerland. Lex Spoon worked on Scala for two years as a post-doc
with Martin Odersky. Bill Venners is president of Artima, Inc.
Artima Press is an imprint of Artima, Inc.
P.O. Box 305, Walnut Creek, California 94597
Copyright © 2007-2016 Martin Odersky, Lex Spoon, and Bill Venners.
All rights reserved.
First edition published as PrePrint™ eBook 2007
First edition published 2008
Second edition published as PrePrint™ eBook 2010
Second edition published 2010
Third edition published as PrePrint™ eBook 2016
Third edition published 2016
Build date of this impression April 6, 2016
Produced in the United States of America
No part of this publication may be reproduced, modified, distributed, stored in a
retrieval system, republished, displayed, or performed, for commercial or
noncommercial purposes or for compensation of any kind without prior written
permission from Artima, Inc.
All information and materials in this book are provided "as is" and without
warranty of any kind.
The term “Artima” and the Artima logo are trademarks or registered trademarks of
Artima, Inc. All other company and/or product names may be trademarks or
registered trademarks of their owners.
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
to Nastaran - M.O.
to Fay - L.S.
to Siew - B.V.
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
Overview
Contents xi
List of Figures xxi
List of Tables xxiii
List of Listings xxv
Foreword xxxii
Acknowledgments xxxiv
Introduction xxxvii
1. A Scalable Language 45
2. First Steps in Scala 64
3. Next Steps in Scala 77
4. Classes and Objects 99
5. Basic Types and Operations 112
6. Functional Objects 135
7. Built-in Control Structures 155
8. Functions and Closures 180
9. Control Abstraction 203
10. Composition and Inheritance 218
11. Scala’s Hierarchy 246
12. Traits 257
13. Packages and Imports 276
14. Assertions and Tests 294
15. Case Classes and Pattern Matching 306
16. Working with Lists 340
17. Working with Other Collections 373
18. Mutable Objects 395
19. Type Parameterization 418
20. Abstract Members 443
21. Implicit Conversions and Parameters 474
22. Implementing Lists 499
23. For Expressions Revisited 512
24. Collections in Depth 528
25. The Architecture of Scala Collections 597
26. Extractors 621
27. Annotations 637
28. Working with XML 645
29. Modular Programming Using Objects 659
30. Object Equality 674
31. Combining Scala and Java 698
32. Futures and Concurrency 714
33. Combinator Parsing 736
34. GUI Programming 765
35. The SCells Spreadsheet 777
A. Scala Scripts on Unix and Windows 802
Glossary 803
Bibliography 819
About the Authors 822
Index 823
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index