Scala als alternative Programmiersprache für die Android-Entwicklung

Android-Programmierung mit Scala

Andre Steingress

Android-Entwicklung mit Java hat nicht nur Vorteile. Oft besteht der Quellcode aus einer hohen Zeilenanzahl von Glue Code, also Code, der nicht der Implementierung der Geschäftslogik, sondern dem „Aneinanderkleben“ einzelner Komponenten dient. Wiederkehrende Aufgaben wie die Implementierung bestimmter Listener Interfaces oder Code, um UI-Komponenten zu initialisieren, verwässern den Code, der sich für die eigentliche Programmfunktionalität verantwortlich zeichnet. Das hat nicht nur optische Auswirkungen, sondern schlägt sich vor allem in der Testbarkeit, Wartbarkeit und Fehleranfälligkeit der Applikation nieder und führt im Endeffekt zu einer vermehrt prozeduralen Programmierweise, statt dass objektorientierte Konzepte genutzt werden. Dieser Artikel soll einen Einblick geben, wie Android-Programmierung mit einer alternativen JVM-Programmiersprache – in diesem Fall Scala – aussehen könnte, und welche Vor- und Nachteile im Vergleich zum Status Quo sich daraus ergeben.

Als am 21. Oktober 2008 [1] das erste offizielle Posting von Google zur Open-Source-Veröffentlichung von Android online gestellt wurde, ging ein Raunen durch die Java-Entwickler-Community. Neben dem im selben Jahr erschienen iPhone (respektive iOS) SDK war nun mobile Anwendungsentwicklung unter Verwendung von Java auf Augenhöhe mit iPhone-Anwendungsentwicklung möglich. Die Fokussierung auf Java mit der Verwendung von Teilen der JRE-Open-Source-Implementierung Apache Harmony [2] dürfte im Nachhinein betrachtet nicht nur aus firmenstrategischen Gründen erfolgt sein. Nach wie vor ist Java laut TIOBE-Index [3] eine der populärsten „Mainstream“-Programmiersprachen. Somit erscheint die einschlägige Ausrichtung einer Plattform als durchaus logisch. Neben dem sich auf die Android-spezifischen Frameworkteile beschränkten Einarbeitungsaufwand stellt Android für Java-Programmierer aus den unterschiedlichsten J*-Erfahrungsbereichen keine besondere Einstiegshürde dar und genießt dementsprechend auch hohe Beliebtheit im Java-Umfeld. Aus Sicht der Softwareentwicklung hat die Verwendung von Java in Android jedoch auch durchaus Nachteile, die unter anderem in den Restriktionen des Sprachdesigns und fehlenden objektorientierten und funktionalen Programmiersprachenkonzepten begründet sind. Beispielsweise führen die exzessive Verwendung von anonymen Klassendefinitionen, die fehlende Möglichkeit von mehrfacher Vererbung und fehlende funktionale Konzepte wie „First-class“-Funktionstypen zu schwer modularisierbaren, kaum wiederverwendbaren und wartbaren Klassen in größeren Applikationen.

Dieser Artikel soll aufzeigen, wie Android-Entwicklung mit der alternativen JVM-Sprache Scala aussehen könnte. Im Abschluss wird auf die Vor- und Nachteile dieser Form der Android-Entwicklung eingegangen. Bevor die konkrete Anwendung von Scala in der Android-Entwicklung behandelt wird, werfen wir einen kurzen Blick auf die Entstehungsgeschichte von Scala, um einen Einblick in die Herkunft und Entwicklung dieser relativ neuen Programmiersprache zu bekommen.

Die skalierbare Sprache

Der Begriff „Scala“ ist ein Akronym für Scalable Language [4]. Die Programmiersprache, der Compiler sowie die zugehörigen Klassenbibliotheken wurden unter der Leitung von Martin Odersky am École polytechnique fédérale de Lausanne (EPFL) entwickelt. Odersky ist in der Java-Community kein Unbekannter. Er wurde unter anderem mit der Programmiersprache Pizza bekannt, aus der heraus in Zusammenarbeit mit Sun der GJ Compiler entwickelt wurde. Dieser wurde wiederum Standard-Compiler für Sun Java 1.3 (im Übrigen waren die bereits aus Pizza bekannten Generics fester Bestandteil, sie waren jedoch in Version 1.3 noch deaktiviert).

Scala ist eine rein objektorientierte Programmiersprache, die aus einem kleinen Sprachkern besteht. Dieser bietet jedoch mächtige Konzepte, die für die Erweiterung der Sprache in der Laufzeitumgebung selbst, aber auch von Bibliotheksautoren benutzt werden können. Wie Java ist Scala statisch typisiert, bietet jedoch im Gegensatz zu ihrem Pendant mehr Möglichkeiten, auf Typdeklarationen an gewissen Stellen zu verzichten und das Feststellen des jeweiligen Datentyps einer Variablen dem Scala Compiler zu überlassen (man spricht von der Herleitung des Typs anhand gewisser Regeln, der Typinferenz). Fälschlicherweise wird daher Scala-Quellcode auf den ersten Blick oft mit Code dynamischer Programmiersprachen verwechselt (Listing 1), obwohl dieser eigentlich statisch typisiert ist.

Listing 1
// Typinferenz
var i = 12           // 12 vom Typ Int, daher muss i: Int sein
var s = obj.toString // obj.toString vom Typ Str, daher muss s: Str sein

// explizite Typdeklaration
var i:Int = 12
var s:Str = obj.toString

Neben dem rein objektorientierten Design und den Spracherweiterungsmöglichkeiten ist Scala vor allem interoperabel mit Java. Einerseits generiert der Scala Compiler JVM-Bytecode, andererseits kann aus Scala-Code heraus auf Java-Klassen zugegriffen werden und umgekehrt. Scala kann aber auch nicht als Weiterentwicklung oder direkter Nachfolger von der Programmiersprache Java gesehen werden – so bietet Scala Features, die nicht in Java gefunden werden (dazu gleich mehr) und verzichtet an gewissen Stellen wiederum explizit auf diverse Sprachmerkmale (in Scala gibt es etwa keine statische Klassenmethoden und primitive Datentypen).

Seit Mai 2011 bietet die Firma Typesafe, mit Mitbegründer Odersky, professionelle Unterstützung in der Scala-Entwicklung. Scala und die zugehörigen Klassenbibliotheken sind unter einer BSD-ähnlichen Lizenz veröffentlicht und können frei bezogen werden [5].

Geschrieben von
Andre Steingress
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.