Scala (programming language)
Scala?(/?skɑ?lɑ?/?SKAH-lah)[8]?is a?strong?statically typed?general-purpose programming language?which supports both?object-oriented programming?and?functional programming. Designed to be concise,[9]?many of Scala's design decisions are aimed to address?criticisms of Java.[7]
Scala source code can be compiled to?Java bytecode?and run on a?Java virtual machine?(JVM). Scala can also be compiled to?JavaScript?to run in a browser, or directly to a native executable. On the JVM Scala provides?language interoperability?with?Java?so that libraries written in either language may be referenced directly in Scala or Java code.[10]?Like Java, Scala is?object-oriented, and uses a?syntax?termed?curly-brace?which is similar to the language?C. Since Scala 3, there is also an option to use the?off-side rule?(indenting) to structure?blocks, and its use is advised.?Martin Odersky?has said that this turned out to be the most productive change introduced in Scala 3.[11]
Unlike Java, Scala has many features of?functional programming?languages (like?Scheme,?Standard ML, and?Haskell), including?currying,?immutability,?lazy evaluation, and?pattern matching. It also has an advanced type system supporting?algebraic data types,?covariance and contravariance,?higher-order types?(but not?higher-rank types),?anonymous types,?operator overloading, optional parameters,?named parameters,?raw strings, and an experimental exception-only version of?algebraic effects?that can be seen as a more powerful version of Java's?checked exceptions.[12]
The name Scala is a portmanteau of?scalable?and?language, signifying that it is designed to grow with the demands of its users.[13]