
Scala ist eine funktionale und objektorientierte, auf der Java Virtual Machine basierte Programmiersprache. Die Sprache wurde 2001 von dem deutschen Informatiker Martin Odersky an der eidgenössischen technischen Hochschule von Lausanne in der Schweiz ins Leben gerufen wurde. Scala ist ein Kofferwort, das sich aus „scalable“ und „language“ zusammensetzt.
Alleinstellungsmerkmale
Scala adressiert die vor allem zum Zeitpunkt ihrer Entstehung existenten harten Einschränkungen von Java und ist eine Fusion funktionaler und objektorientierter Programmierung. Scala ist akademisch geprägt, hat aber gleichzeitig den Anspruch pragmatisch und flexibel zu sein und Konzepte zu bieten, die im Kleinen und Großen gleichermaßen gut angewandt werden können, daher der Name „skalierbare Sprache“.
Einsatzbereiche
Scala wird besonders im Finanzsektor und im Big-Data-Bereich geschätzt, wo die Sprache ihre Stärken in der Parallelität und Datenverarbeitung voll ausspielen kann. Das weitverbreitete Scala-Framework Akka ist eine Umsetzung des Aktorenmodells, das oft mit Erlang assoziiert wird, und wird für die Entwicklung verteilter, nebenläufiger Systeme verwendet. Für die Entwicklung skalierbarer Webanwendungen ist Play, ein weiteres Scala-Framework, populär; es basiert auf dem Model-View-Controller-Pattern und unterstützt hochperformante Webanwendungen.
Scala findet, teils in Kombination mit Akka und/oder Play, Einsatz in Unternehmen wie Airbnb, Apple, Duolingo, Foursquare, LinkedIn, Morgan Stanley, SoundCloud, Tesla, UBS, Verizon und Zalando sowie den Tageszeitungen The Guardian und The New York Times.
Zwei der bekanntesten Frameworks, die mit Scala entwickelt wurden, sind Apache Spark und Apache Kafka. Spark, ein Framework zur verteilten Datenverarbeitung, ist besonders im Big-Data-Bereich bedeutend und bleibt das führende Tool für Datenanalyse und Machine Learning. Apache Kafka, ursprünglich ebenfalls in Scala entwickelt, ist mittlerweile überwiegend in Java geschrieben, wird jedoch weiterhin stark in Scala-basierten Projekten eingesetzt. Scala hat somit eine zentrale Rolle in Bereichen, die hochskalierbare, leistungsfähige und flexible Architekturen erfordern.
Pros
Scala ist als JVM-Sprache nicht nur interoperabel mit Java, sondern kann auch zu JavaScript transpiliert und nativ kompiliert werden, was die Sprache in unterschiedlichsten Ökosystemen einsatzfähig macht. Scala kombiniert funktionale und objektorientierte Paradigmen, wodurch es eine enorme Vielseitigkeit erreicht, die moderne Entwicklungsanforderungen bestens bedient.
Die Sprache hat einige Gemeinsamkeiten mit Kotlin, gerade im direkten Vergleich mit Java. Unter anderem verzichten beide Sprachen auf das verpflichtende Semikolon nach jeder Anweisung, bieten Infix-Funktionen, Singleton-Objekte und Single-Expression Functions an, Unit
als Datentypalternative zum Java-Schlüsselwort void
, Parameter und Rückgabewerte im Pascal-Stil, und die Schlüsselwörter val
und var
für Variablen.
Ein entscheidender Vorteil von Scala ist das fortschrittliche Typensystem, das Typinferenz und komplexe Typkonstruktionen wie Higher-Order Functions, Typ-Parameterisierung und algebraische Datentypen unterstützt. Dies ermöglicht es Entwicklern, äußerst präzisen und stabilen Code zu schreiben, bei dem Typfehler oft schon zur Kompilierzeit abgefangen werden. Die Sprache unterstützt Closures, Lazy Evaluation und Pattern Matching sowie optionale und benannte Parameter. Zudem sind Operatoren in Scala vollwertige Funktionen, was eine flexible, lesbare und intuitive Syntax ermöglicht:
1 :: List(2, 3, 4) // fügt 1 vorne in der Liste ein
List(2, 3, 4).::(1) // Schreibweise ohne infix
List(1, 2) ::: List(3, 4) // erzeugt List(1, 2, 3, 4)
List(3, 4).:::(List(1, 2)) // Schreibweise ohne infix
Zu den fortgeschrittenen Konzepten zählen Implicits und Givens, welche eine präzisere Steuerung impliziter Werte und Kontexte bieten. Ergänzend gibt es Context Bounds, Higher-Kinded Types, Path-Dependent Types, Dependent Method Types und Self Types, die sehr flexible Abstraktionen erlauben und Scala besonders leistungsfähig für die Erstellung komplexer Bibliotheken und Frameworks machen.
Scala unterstützt auch Comprehensions über for
und yield
, die ausdrucksstarke, deklarative Schleifen ermöglichen. So lassen sich etwa alle Quadrate der Zahlen zwischen 1 und 1000, die durch 3 oder 5 teilbar sind, einfach berechnen:
val squares = for {
n <- 1 to 1000
if n % 3 == 0 || n % 5 == 0
} yield n * n
Durch die Unterstützung moderner Parallelitätsmodelle wie Futures und dem Aktorenmodell ist Scala gut geeignet für verteilte, hochskalierbare Systeme.
Die hohe Flexibilität prädestiniert Scala für die Erstellung domänenspezifischer Sprachen.
Cons
Scala ist eine anspruchsvolle Sprache mit vielen Konzepten, die eine lange Einarbeitungszeit erfordert. Die große Flexibilität und Vielzahl an Features führen dazu, dass Scala-Code leicht unübersichtlich und schwer wartbar wird, wenn keine klare Strukturierung und Disziplin eingehalten werden. Unerfahrene Entwickler riskieren, unleserlichen und fehleranfälligen Code zu schreiben, insbesondere durch exzessiven Einsatz von Implicits oder komplexen Typensystem-Features.
Im Vergleich zu allgemein verbreiteten Sprachen wie Java, C# oder Go ist Scala eine Nischensprache, die in speziellen Bereichen wie Data Engineering und Finanztechnologie Anwendung findet. Trotz überdurchschnittlicher Gehälter bleibt das Jobangebot für Scala-Entwickler eingeschränkt. Die kleinere Community bedeutet zudem eine begrenzte Anzahl an Ressourcen, Tutorials und Support, was den Einstieg erschweren kann.
Der Übergang zu Scala 3 brachte viele Änderungen, wodurch sich das Ökosystem in Scala-2- und Scala-3-Bibliotheken teilt. Zwar war der Einschnitt technisch nicht so drastisch wie etwa bei Python 2 auf Python 3, jedoch spüren Entwickler durch die geringere Verbreitung von Scala die Folgen stärker. Viele Bibliotheken und Unternehmen zögern, auf die neue Version zu migrieren, was zu einer Fragmentierung führt und Scala-Neueinsteigern zusätzlichen Aufwand bei der Auswahl und Integration von Bibliotheken bereitet.
Datenblatt
Name | Scala |
Webseite | http://www.scala-lang.org/ |
Erscheinungsjahr | 2004 |
Aktuellste Version (Stand 10. November 2024) | 3.5 |
Typisierung | statisch |
Paradigmen | funktional, objektorientiert |
Pros | Cons |
---|---|
sehr hohe Flexibilität | lange Einarbeitungszeit |
Java-Interoperabilität und JavaScript-Transpilation | Gefahr schwer wartbaren Code zu schreiben |
Kombination funktionaler und objektorientierter Programmierung | eingeschränkter Jobmarkt |
fortschrittliches Typensystem | geringe Verbreitung |
Typeninferenz und Pattern Matching | fragmentiertes Ökosystem durch Scala 3 |
gute Eignung für hochskalierbare Systeme | |
virtuallet
virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum Scala-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.
Interview mit Martin Odersky zur Entstehung von Scala