Book Image

Learning Scala Programming

By : Vikash Sharma
Book Image

Learning Scala Programming

By: Vikash Sharma

Overview of this book

Scala is a general-purpose programming language that supports both functional and object-oriented programming paradigms. Due to its concise design and versatility, Scala's applications have been extended to a wide variety of fields such as data science and cluster computing. You will learn to write highly scalable, concurrent, and testable programs to meet everyday software requirements. We will begin by understanding the language basics, syntax, core data types, literals, variables, and more. From here you will be introduced to data structures with Scala and you will learn to work with higher-order functions. Scala's powerful collections framework will help you get the best out of immutable data structures and utilize them effectively. You will then be introduced to concepts such as pattern matching, case classes, and functional programming features. From here, you will learn to work with Scala's object-oriented features. Going forward, you will learn about asynchronous and reactive programming with Scala, where you will be introduced to the Akka framework. Finally, you will learn the interoperability of Scala and Java. After reading this book, you'll be well versed with this language and its features, and you will be able to write scalable, concurrent, and reactive programs in Scala.
Table of Contents (21 chapters)
Title Page
Packt Upsell
Contributors
Preface
Index

Looking for implicits


Your usual application Scala code might contain some constructs that import other classes and objects, or it might also inherit other classes. You write methods that expect types as parameters and also declare parameters. So when the Scala compiler looks for an implicit value, where should it start looking for such a value? The compiler starts to look for an implicit value according to the following criteria:

  • Defined in current scope
  • Explicitly imported
  • Imported using wildcards
  • Companion object of a type
  • Implicit scope of an argument's type
  • Implicit scope of type arguments
  • Outer objects for nested types

We know that if we define an implicit value in the current scope (block of code), it gets the highest precedence. Afterwards, you can also import it using an import statement, as shown in the following code:

import scala.concurrent.Future 
import scala.concurrent.ExecutionContext.Implicits.global 
 

object FuturesApp extends App { 
 
  val futureComp = Future { 
     1 + 1 ...