Scala (Scalable Language) is a modern multi-paradigm programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages. Scala allows to use functional programming techniques to stabilize our applications and reduce issues that arise from unintended side effects.
  • By switching from mutable data structures to immutable data structures,
  • From regular methods to pure functions
  • No effect on the environment
  • Our code will be safer, more stable, and much easier to comprehend.
  • Our code will also be simpler and more expressive.

Object-Oriented

Scala is a pure object-oriented language in the sense that every value is an object. Types and behavior of objects are described by classes and traits. Class abstractions are extended by sub-classing and a flexible mix-in-based composition mechanism as a clean replacement for 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. Features taken from a dynamic languages such as Python, Ruby or JavaScript.
  • Short
  • Expressive syntax
  • Avoiding unnecessary punctuation
  • Condensing map, filter and reduce operations to simple one-liners

Statically Typed

Scala is equipped with an expressive type system that enforces statically that abstractions are used in a safe and coherent manner. Features taken from statically-typed languages such as Java, C# or C++
  • Explicit types,
  • Punctuation,
  • Boilerplate code.
  • We will also be able to pick up an expressive syntax rarely seen in other compiled languages
Finally, our code will be strongly typed (even without specifying explicit types) and support both multiple inheritanceandmix-in capabilities. Also, any type incompatibilities will be caught before code ever runs.

Extensible

The design of Scala acknowledges the fact that in practice, the development of domain-specific applications often requires domain-specific language extensions. Scala provides a unique combination of language mechanisms that make it easy to smoothly add new language constructs in form of libraries:
  • Any method may be used as an infix or postfix operator,
  • Closures are constructed automatically depending on the expected type (target typing).
A joint use of both features facilitates the definition of new statements without extending the syntax and without using macro-like meta-programming facilities.

Inter-operates with Java and .NET

Scala is designed to inter-operate well with popular programming environments like the Java Runtime Environment (JRE) and the .NET Framework (CLR). In particular, the interaction with mainstream object-oriented languages like Java and C# is as smooth as possible. Scala has the same compilation model (separate compilation, dynamic class loading) like Java and C# and allows access to thousands of high-quality libraries.

Referances