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



cursussen


projecten