Home > Store

Scala for the Impatient

Register your product to gain access to bonus material or receive a coupon.

Scala for the Impatient


  • Sorry, this book is no longer in print.
Not for Sale



  • By Cay Horstmann, author of Core Java -- the book that has helped hundreds of thousands of programmers discover and master Java
  • Guides programmers through four levels of Scala mastery, from the absolute basics to expert-level
  • Includes 12 complete sample application projects


  • Copyright 2012
  • Dimensions: 7" x 9-1/8"
  • Pages: 384
  • Edition: 1st
  • Book
  • ISBN-10: 0-321-77409-4
  • ISBN-13: 978-0-321-77409-5

Scala is a modern programming language for the Java Virtual Machine (JVM) that combines the best features of object-oriented and functional programming languages. Using Scala, you can write programs more concisely than in Java, as well as leverage the full power of concurrency. Since Scala runs on the JVM, it can access any Java library and is interoperable with Java frameworks.

Scala for the Impatient concisely shows developers what Scala can do and how to do it. In this book, Cay Horstmann, the principal author of the international best-selling Core Java™, offers a rapid, code-based introduction that’s completely practical. Horstmann introduces Scala concepts and techniques in “blog-sized” chunks that you can quickly master and apply. Hands-on activities guide you through well-defined stages of competency, from basic to expert. Coverage includes  

  • Getting started quickly with Scala’s interpreter, syntax, tools, and unique idioms
  • Mastering core language features: functions, arrays, maps, tuples, packages, imports, exception handling, and more
  • Becoming familiar with object-oriented programming in Scala: classes, inheritance, and traits
  • Using Scala for real-world programming tasks: working with files, regular expressions, and XML
  • Working with higher-order functions and the powerful Scala collections library
  • Leveraging Scala’s powerful pattern matching and case classes
  • Creating concurrent programs with Scala actors
  • Implementing domain-specific languages
  • Understanding the Scala type system
  • Applying advanced “power tools” such as annotations, implicits, and delimited continuations 

Scala is rapidly reaching a tipping point that will reshape the experience of programming. This book will help object-oriented programmers build on their existing skills, allowing them to immediately construct useful applications as they gradually master advanced programming techniques.


Author's Site

Visit the author's site here

Sample Content

Online Sample Chapters

Control Structures and Functions in Scala

The Basics of Scala

Sample Pages

Download the sample pages (includes Chapters 1 and 2 and Index)

Table of Contents

Foreword xvii

Preface xix

About the Author xxi


Chapter 1: The Basics 1

1.1 The Scala Interpreter 1

1.2 Declaring Values and Variables 3

1.3 Commonly Used Types 4

1.4 Arithmetic and Operator Overloading 5

1.5 Calling Functions and Methods 7

1.6 The apply Method 8

1.7 Scaladoc 8

Exercises 11

Chapter 2: Control Structures and Functions 13

2.1 Conditional Expressions 14

2.2 Statement Termination 15

2.3 Block Expressions and Assignments 16

2.4 Input and Output 17

2.5 Loops 18

2.6 Advanced for Loops and for Comprehensions 19

2.7 Functions 20

2.8 Default and Named Arguments 21

2.9 Variable Arguments 22

2.10 Procedures 23

2.11 Lazy Values 23

2.12 Exceptions 24

Exercises 26

Chapter 3: Working with Arrays 29

3.1 Fixed-Length Arrays 29

3.2 Variable-Length Arrays: Array Buffers 30

3.3 Traversing Arrays and Array Buffers 31

3.4 Transforming Arrays 32

3.5 Common Algorithms 34

3.6 Deciphering Scaladoc 35

3.7 Multidimensional Arrays 37

3.8 Interoperating with Java 37

Exercises 38

Chapter 4: Maps and Tuples 41

4.1 Constructing a Map 41

4.2 Accessing Map Values 42

4.3 Updating Map Values 43

4.4 Iterating over Maps 43

4.5 Sorted Maps 44

4.6 Interoperating with Java 44

4.7 Tuples 45

4.8 Zipping 46

Exercises 46

Chapter 5: Classes 49

5.1 Simple Classes and Parameterless Methods 49

5.2 Properties with Getters and Setters 50

5.3 Properties with Only Getters 53

5.4 Object-Private Fields 54

5.5 Bean Properties 55

5.6 Auxiliary Constructors 56

5.7 The Primary Constructor 57

5.8 Nested Classes 60

Exercises 63

Chapter 6: Objects 65

6.1 Singletons 65

6.2 Companion Objects 66

6.3 Objects Extending a Class or Trait 67

6.4 The apply Method 67

6.5 Application Objects 68

6.6 Enumerations 69

Exercises 71

Chapter 7: Packages and Imports 73

7.1 Packages 74

7.2 Scope Rules 75

7.3 Chained Package Clauses 77

7.4 Top-of-File Notation 77

7.5 Package Objects 78

7.6 Package Visibility 78

7.7 Imports 79

7.8 Imports Can Be Anywhere 80

7.9 Renaming and Hiding Members 80

7.10 Implicit Imports 80

Exercises 81

Chapter 8: Inheritance 85

8.1 Extending a Class 85

8.2 Overriding Methods 86

8.3 Type Checks and Casts 87

8.4 Protected Fields and Methods 88

8.5 Superclass Construction 88

8.6 Overriding Fields 89

8.7 Anonymous Subclasses 91

8.8 Abstract Classes 91

8.9 Abstract Fields 91

8.10 Construction Order and Early Definitions 92

8.11 The Scala Inheritance Hierarchy 94

8.12 Object Equality 95

Exercises 96

Chapter 9: Files and Regular Expressions 99

9.1 Reading Lines 100

9.2 Reading Characters 100

9.3 Reading Tokens and Numbers 101

9.4 Reading from URLs and Other Sources 102

9.5 Reading Binary Files 102

9.6 Writing Text Files 102

9.7 Visiting Directories 103

9.8 Serialization 104

9.9 Process Control 105

9.10 Regular Expressions 106

9.11 Regular Expression Groups 107

Exercises 107

Chapter 10: Traits 111

10.1 Why No Multiple Inheritance? 111

10.2 Traits as Interfaces 113

10.3 Traits with Concrete Implementations 114

10.4 Objects with Traits 115

10.5 Layered Traits 116

10.6 Overriding Abstract Methods in Traits 117

10.7 Traits for Rich Interfaces 118

10.8 Concrete Fields in Traits 118

10.9 Abstract Fields in Traits 119

10.10 Trait Construction Order 120

10.11 Initializing Trait Fields 122

10.12 Traits Extending Classes 123

10.13 Self Types 124

10.14 What Happens under the Hood 125

Exercises 127

Chapter 11: Operators 131

11.1 Identifiers 131

11.2 Infix Operators 132

11.3 Unary Operators 133

11.4 Assignment Operators 133

11.5 Precedence 134

11.6 Associativity 135

11.7 The apply and update Methods 135

11.8 Extractors 136

11.9 Extractors with One or No Arguments 138

11.10 The unapplySeq Method 138

Exercises 139

Chapter 12: Higher-Order Functions 143

12.1 Functions as Values 143

12.2 Anonymous Functions 144

12.3 Functions with Function Parameters 145

12.4 Parameter Inference 146

12.5 Useful Higher-Order Functions 146

12.6 Closures 148

12.7 SAM Conversions 149

12.8 Currying 149

12.9 Control Abstractions 150

12.10 The return Expression 152

Exercises 152

Chapter 13: Collections 155

13.1 The Main Collections Traits 156

13.2 Mutable and Immutable Collections 157

13.3 Sequences 158

13.4 Lists 159

13.5 Mutable Lists 160

13.6 Sets 161

13.7 Operators for Adding or Removing Elements 162

13.8 Common Methods 164

13.9 Mapping a Function 167

13.10 Reducing, Folding, and Scanning 168

13.11 Zipping 171

13.12 Iterators 172

13.13 Streams 173

13.14 Lazy Views 174

13.15 Interoperability with Java Collections 175

13.16 Threadsafe Collections 177

13.17 Parallel Collections 178

Exercises 179

Chapter 14: Pattern Matching and Case Classes 183

14.1 A Better Switch 184

14.2 Guards 185

14.3 Variables in Patterns 185

14.4 Type Patterns 186

14.5 Matching Arrays, Lists, and Tuples 187

14.6 Extractors 188

14.7 Patterns in Variable Declarations 188

14.8 Patterns in for Expressions 189

14.9 Case Classes 189

14.10 The copy Method and Named Parameters 190

14.11 Infix Notation in case Clauses 191

14.12 Matching Nested Structures 192

14.13 Are Case Classes Evil? 192

14.14 Sealed Classes 193

14.15 Simulating Enumerations 194

14.16 The Option Type 194

14.17 Partial Functions 195

Exercises 196

Chapter 15: Annotations 199

15.1 What Are Annotations? 200

15.2 What Can Be Annotated? 200

15.3 Annotation Arguments 201

15.4 Annotation Implementations 202

15.5 Annotations for Java Features 203

15.6 Annotations for Optimizations 206

15.7 Annotations for Errors and Warnings 210

Exercises 211

Chapter 16: XML Processing 213

16.1 XML Literals 214

16.2 XML Nodes 214

16.3 Element Attributes 216

16.4 Embedded Expressions 217

16.5 Expressions in Attributes 218

16.6 Uncommon Node Types 219

16.7 XPath-like Expressions 220

16.8 Pattern Matching 221

16.9 Modifying Elements and Attributes 222

16.10 Transforming XML 223

16.11 Loading and Saving 223

16.12 Namespaces 226

Exercises 227

Chapter 17: Type Parameters 231

17.1 Generic Classes 232

17.2 Generic Functions 232

17.3 Bounds for Type Variables 232

17.4 View Bounds 234

17.5 Context Bounds 234

17.6 The Manifest Context Bound 235

17.7 Multiple Bounds 235

17.8 Type Constraints 236

17.9 Variance 237

17.10 Co- and Contravariant Positions 238

17.11 Objects Can’t Be Generic 240

17.12 Wildcards 241

Exercises 241

Chapter 18: Advanced Types 245

18.1 Singleton Types 246

18.2 Type Projections 247

18.3 Paths 248

18.4 Type Aliases 249

18.5 Structural Types 250

18.6 Compound Types 250

18.7 Infix Types 251

18.8 Existential Types 252

18.9 The Scala Type System 253

18.10 Self Types 254

18.11 Dependency Injection 255

18.12 Abstract Types 257

18.13 Family Polymorphism 259

18.14 Higher-Kinded Types 263

Exercises 265

Chapter 19: Parsing 269

19.1 Grammars 270

19.2 Combining Parser Operations 271

19.3 Transforming Parser Results 273

19.4 Discarding Tokens 274

19.5 Generating Parse Trees 275

19.6 Avoiding Left Recursion 276

19.7 More Combinators 277

19.8 Avoiding Backtracking 280

19.9 Packrat Parsers 280

19.10 What Exactly Are Parsers? 281

19.11 Regex Parsers 282

19.12 Token-Based Parsers 283

19.13 Error Handling 285

Exercises 286

Chapter 20: Actors 289

20.1 Creating and Starting Actors 290

20.2 Sending Messages 291

20.3 Receiving Messages 292

20.4 Sending Messages to Other Actors 293

20.5 Channels 294

20.6 Synchronous Messages and Futures 295

20.7 Thread Sharing 296

20.8 The Actor Life Cycle 299

20.9 Linking Actors 300

20.10 Designing with Actors 301

Exercises 302

Chapter 21: Implicits 305

21.1 Implicit Conversions 306

21.2 Using Implicits for Enriching Existing Libraries 306

21.3 Importing Implicits 307

21.4 Rules for Implicit Conversions 308

21.5 Implicit Parameters 309

21.6 Implicit Conversions with Implicit Parameters 310

21.7 Context Bounds 311

21.8 Evidence 312

21.9 The @implicitNotFound Annotation 313

21.10 CanBuildFrom Demystified 314

Exercises 316

Chapter 22: Delimited Continuations 319

22.1 Capturing and Invoking a Continuation 320

22.2 The “Computation with a Hole” 321

22.3 The Control Flow of reset and shift 322

22.4 The Value of a reset Expression 323

22.5 The Types of reset and shift Expressions 323

22.6 CPS Annotations 325

22.7 Turning a Recursive Visit into an Iteration 326

22.8 Undoing Inversion of Control 329

22.9 The CPS Transformation 332

22.10 Transforming Nested Control Contexts 334

Exercises 336

Index 339


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020