Geschiedenis
Scala is gemaakt door Martin Odersky bij het EPFL in Lausanne.Hiervoor heeft hij gewerkt aan de java compiler 1.3, 1.4 en generics.
Compact als een scripttaal
Scala is een statische 'strong typed' programmeertaal, maar je hoeft het type niet altijd op te geven.De compiler is vaak in staat het type te extraheren uit de context.
Hier wordt de code erg compact en lijkt op een dynamische taal. Dezelfde code is een factor 2 a 3 kleiner dan Java.
Maar de compiler zal veel fouten voorkomen, wat uitbreid runtime testen en performance scheelt
Functioneel Programmeren
Scala heeft functionele elementen als- functie waarden
een functie kan aan een variabele worden toegewezen - anonieme functies
een functie zonder naam, maar met parameters en body - geneste functies
een functie kan gedefinieerd worden binnen een andere functie. - closures
een inner functie kan de variabelen van de outer functies lezen en schrijven. - currying
een functie met meerdere parameters worden vervangen door een ketting van functies met een enkele parameter - higher order functies
een functie kan als parameter aan een andere functie worden meegegeven of als return waarde teruggegeven - immutable collections
Van alle collections (List, Array, Map, ..) zijn mutable en immutable versies beschikbaar. Om side effects te elimineren. - geen side effects
een pure function heeft geen side effects. Dit betekent dat binnen een functie de state van het systeem niet veranderd
Dit is essentieel in parallelle systemen, omdat de volgorde van instructies onbepaald is.
OO maar dan echt
- nummers zijn klassen en operatoren zijn gewone functies.
Sterker nog ieder functie is een operator en andersom. x + 3 is gelijk aan x.+(3) en ook x.add(3) is gelijk aan x add 3 -
traits, zijn een uitbreiding op de java interfaces.
Een trait is een interface maar met contrete functies en variabelen. Hierdoor worden traits een vervanger voor multiple inheritance. Dit staat andere architectuur structuren toe op basis van mixin van componenten. - generics
Scala kent generics op een schone manier, dus niet de wildcards als in Java
combinatie OO en FP
- pattern matching
Scala kent een krachtig pattern matching die lijkt op een switch..case structuur in andere talen, maar de matching mogelijkheden zijn bijna onuitputtelijk:- matching op waarden
- matching op type
- matching op constructor
- matching met gards
- matching wildcards
- domain specifieke talen
Scala is een 'scalable languages' De taal is uitbreidbaar met andere 'keywords'. Het zijn geen echt keywords maar zijn functies, die er uitzien als keywords Dit wordt in de scala uitgebreid gebruikt in de bibliotheken. Een paar voorbeelden:- parallelle actor model
- xml ondersteuning in de taal

