Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

  • Features
    • JVM Interoperability - Scala runs on the JVM, so Java and Scala stacks can be mixed for seamless integration.
    • Type Inference - Scala is statically typed. However, Scala provides type inference to ease the burden of an advanced type system.
    • Object Oriented - Scala is a pure object-oriented language in the sense that every value is an object. Data types and behaviors of objects are described by classes and traits. Class abstractions are extended by subclassing and by a flexible mixin-based composition mechanism to avoid the problems of multiple inheritance.
    • Functional - Scala is also a functional language in the sense that every function is a value. Scala provides a lightweight syntax for defining anonymous functions, it supports higher-order functions, it allows functions to be nested, and supports currying. Scala’s case classes and its built-in support for pattern matching model algebraic types used in many functional programming languages. Singleton objects provide a convenient way to group functions that aren’t members of a class.
    • Concurrency & Distribution - Use data-parallel operations on collections, use actors for concurrency and distribution, or futures for asynchronous programming.

Help us explain this better! File a GitHub issue at if you have suggestions, or submit a patch with improvements to the file.

Try It!

If you've downloaded the command-line client and have Scala installed on your machine, then go ahead and fetch the first problem.

exercism fetch scala

In order to be able to submit your solution, you'll need to configure the client with your Exercism API key.

exercism configure --key=YOUR_EXERCISM_KEY

When you've written a solution, submit it to the site. You'll have to configure the command-line client with your exercism API key before you can submit.

exercism submit PATH_TO_FILE