Donnerstag, 24. Mai 2012


Artikel

April 2010 | Artikel

Scala, oder: Was hat es mit dem Hype auf sich? Ein kurzer Überblick

(Link zum Artikel: http://www.entwickler-magazin.de///003053)

Neulich, im Meeting

Text: Heiko Seeberger
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Scala entwächst der Hype-Phase und kommt in der Breite zur Anwendung, denn immer mehr Projekte und Firmen setzen auf Scala. Warum eigentlich? Darauf wollen wir in diesem Artikel antworten und auch gleich einen kurzen Einblick geben, wie Scala-Code aussieht.
Teil 1   Teil 2   

Eine beinahe wahre Geschichte: Martin ist ein leidenschaftlicher Softwareentwickler. Die letzten Jahre hat er beruflich mit Java zugebracht, aber in so mancher langen Nacht beschäftigt er sich mit anderen Programmiersprachen. Weil er die Java Virtual Machine für eine großartige Sache hält, gilt seine Aufmerksamkeit vor allem JVM-Sprachen, die in letzter Zeit wie Pilze aus dem Boden schießen, also Groovy, JRuby, Clojure und natürlich Scala. Er kann allen etwas abgewinnen, schließlich kann man immer und überall etwas dazulernen, aber sein Favorit ist ganz klar Scala. Eines Tages in einer Teamsitzung versucht er seine Kollegen sowie seinen Chef Helmut davon zu überzeugen, das nächste Projekt doch einmal mit Scala zu versuchen.

Scala ist reif

Helmut, bekannt dafür, die Dinge gerne auszusitzen, und immer noch gestresst vom gerade erst abgeschlossenen Umstieg von Java 1.4 auf Java 5: „Schon wieder etwas Neues? Kommt nicht in Frage, schließlich setzen wir nur reife Produkte ein. Und von wem kommt dieses Scala überhaupt?“ Martin: „Aber Scala ist doch reif! Es wird schon seit 2003 entwickelt und erscheint gerade in der Version 2.8. Dahinter steht kein geringerer als Martin Odersky, Professor an der EPFL in Lausanne und bekannte Java-Größe, der schon den JIT-Compiler und die Java-Generics entwickelt hat.“

Scala steigert Produktivität und Qualität

Dann versucht es Helmut eben mit dem BWL-Killer-Argument: „Welchen (finanziellen) Nutzen bringt uns denn Scala?“ Darauf ist Martin natürlich vorbereitet, denn er kennt seinen Chef und bei aller Liebe zum Spiel – Entwickler brauchen bekanntlich immer wieder ein neues Spielzeug – hält er Scala tatsächlich auch betriebswirtschaftlich für sinnvoll: „Mit Scala können wir nicht nur direkt Kosten sparen, weil wir effizienter Entwickeln können, sondern wir können auch die Qualität steigern. Wir sind effizienter bei der Entwicklung, weil wir viel weniger Code schreiben müssen, um dasselbe zu erreichen wie in Java. Darüber hinaus ist Scala so ausdrucksstark, dass wir Code viel schneller lesen und verstehen können. Und bekanntlich verbringen wir mehr Zeit damit, Code zu lesen, als zu schreiben. Wir können auch die Qualität steigern, weil Scala durch funktionale Programmierung das Testen einfacher macht und mächtige Libraries für schwierige Aufgaben bereit hält, z. B. die Actor-Library für Concurrency, bekanntlich ein sehr heikles Thema mit Java-Bordmitteln.“ Darauf fällt Helmut erst einmal nichts weiter ein, als die Sache an Guido zu delegieren, einen anderen Entwickler, der sich stets gegen neue Sprachen sträubt.

Scala ist knapp und präzise

Guido: „Ich bin mit Java nach wie vor zufrieden und halte die angeblichen Vorzüge von neuen Sprachen für übertrieben. Lass doch mal sehen!“

Danke für die Steilvorlage!“ denkt sich Martin: „Nimm einfach einmal eine typische JavaBean, z. B. für eine Person. Hier kommt der Java-Code:“

  1. public class Person {
  2. private final String firstName;
  3. private final String lastName;
  4. public Person(String firstName, String lastName) {
  5. this.firstName = firstName;
  6. this.lastName = lastName;
  7. }
  8. public String getFirstName() {
  9. return firstName;
  10. }
  11. public String getLastName() {
  12. return lastName;
  13. }
  14. }

„Viel Holz für eine einfache Person mit Vor- und Nachnamen, oder? Hier kommt der Scala-Code, der absolut äquivalent ist“: class person(val firstName: String, val lastName: String). „Nur eine Zeile statt zehn oder mehr. Selbst wenn moderne IDEs den meisten Java-Code, z. B. die Getter-Methoden, generieren können, schreibt man den Scala-Code schneller hin. Und vor allem erkennt man auf einen Blick, wozu der Code dient.“

Teil 1   Teil 2   

Kommentare

Gravatar raksch 30.04.2010
um 12:33 Uhr
sorry, aber das Beispiel mit der Person-Bean ist seltendämlich. In Java kann ich auch auf getter und setter verzichten und mache alle Variablen public, aber das tue ich nicht, aus gutem Grund.
Der Artikel ist einfach unseriös, deswegen werde ich ihn auchl nicht weiterlesen.
#zitieren
Gravatar Stefan 10.05.2010
um 15:54 Uhr
Und wenn sie nicht an der funktionale Programmierung gestorben sind dann freuen sie sich heute noch...Tut mir leid aber der Stil des Beitrages ist vorsichtig genannt einfach nur peinlich! #zitieren
Gravatar Peter Liersch 21.05.2010
um 08:57 Uhr
Die Lernkurve für Java-Programmierer ist steil - es ist falsch zu glauben man könne "mal eben" auf Scala umsteigen. Die Unterschiede sind immens.

Scala ist keine leichte Programmiersprache.
Scala ist vor allem nicht leichter als Java. Im Gegenteil hat es viele Elemente und Konzepte, die gerade von "klassischen Java-Entwicklern" unnötig viel abverlangen. Der Code mag kürzer sein, in großen Projekten ist er aber sogar schwerer zu erfassen als Java.

Ein Wechsel von der OOP zur oder auch ein echter Einstieg in funktionale Programmierung ist mit einem grossen Umdenken verbunden.

Scala ist für den universitären Bereich hervorragend, im produktiven Einsatz bietet es kaum echte Vorteile gegenüber dem klassischen Java.

Scala ist sehr gut, aber weder für alle noch für alle Einsatzgebiete. Und es ist definitiv kein Ersatz für Java.
#zitieren
Gravatar Michael 08.06.2010
um 19:30 Uhr
Schön leicht und kurz der Quellcode nur muss man für jede Zeile die man in Scala schreibt anscheinend fünf weitere Zeilen kommentieren. Und vorher muss man natürlich immer schön nachgooglen wie man was macht. Viel Spass damit in einem grossen Projekt. Die Performance ist bei Interpretersprachen auch immer super deshalb finde ich die Idee von virtuellen Maschinen auch absolut super genauso wie Hans oder hieß der jetzt Lars??? #zitieren
Gravatar Dominik 01.07.2010
um 19:41 Uhr
"Und vorher muss man natürlich immer schön nachgooglen wie man was macht" #zitieren
Gravatar Richard 16.07.2010
um 12:27 Uhr
@raksch In diesem Beispiel sind die Variablen keinesfalls public es sind weiterhin (in diesem Trivialfall implizite) getter vorhanden. (val statt var bedeutet in etwa "final")@ Peter Scala verbindet sehr elegant OOP und funktionale Programmierung ein "Umstieg" ist hier nicht erforderlich@Michael Scala wird in JVM Bytecode übersetzt und ist idr. gleich schnell wie JavaWas der Bauer nicht kennt frisst er nicht (und lässt dadurch so manchen Leckerbissen entgehen) #zitieren
Gravatar René 17.03.2011
um 23:48 Uhr
Ich sehe das erste Beispiel nicht so kritisch wir raksch. Man mag natürlich zunächst denken das hier das Prinzip des Information Hidings verletzt wird weil eigentlich zu kapselnde interne Member von außen zugreifbar sind. Tatsächlich ist die Implementierung des Zugriffs nachträglich ohne Schnittstellenänderung möglich // 1. alte Implementierung mit impliziten trivialen Gettern und Setternclass Person(var firstName: String var lastName: String)// 2. neue Implementierung mit nicht-trivialen expliziten Getter und Setter für firstNameclass Person(private val initialFirstName:String lastName:String) { /* private member 'privateFirstName' wird mit dem Konstruktor-parameter 'initialFirstName' initialisiert */ private var privateFirstName: String = initialFirstName // getter def firstName = { // simples Logging println("Der firstName '" + value + "' wird zurückgegeben") privateFirstName } // setter def firstName_=(value: String) = { // simples Logging println("Der firstName wird zu '" + value + "' geändert"); privateFirstName = value }}...// Zugriff für beide Implementierungvariantenvar myPerson = new Person("Hans" "Wurst");println(myPerson.firstName)myPerson.firstName = "Heinz" println(myPerson.firstName)Vorteile:1. Übersichtliche Property-Syntax wie in C# mit einem Zuweisungsoperator = in der Mitte also statt getX().getY().setZ(getA().getB()) dann x.y.z = a.b2. Man spart sich gegenüber Java die Implementierung der trivialen Getter und Setter die ja wohl eher Regel als Ausnahme sind. Wie beschrieben können die impliziten trivialen Getter/Setter in Scala zu expliziten nichtrivialen erweitert werden ohne die Schnittstelle der betreffenden Klasse zu ändern. Etwas Vergleichbares kennt Java nicht. #zitieren
Gravatar René 17.03.2011
um 23:51 Uhr
Arrgh... wenigstens die Umbrüche hätte er mir lassen können... #zitieren
Gravatar Trepper 18.03.2011
um 09:04 Uhr
Scala bietet viel, was ich in Java vermisse, aber Scala Code scheint mir in der Praxis eher weniger verständlich als Java-Code zu sein. Dass man beliebige Operatoren definieren kann, fördert nicht gerade die Lesbarkeit; Funktionen die ohne "." und "()" aufgerufen werden auch nicht. Implizite Konvertierungen tun ihr übriges.

Obwohl ich Scala mag, habe ich Zweifel, ob das die Sprache sein wird, die zu dauerhaft wartbaren und wirtschaftlichen Projekten führen wird. Ehrlich gesagt finde ich in diesem Punkt C# viel besser, dann das ist deutlich moderner als Java zieht aber im Gegensatz zu Scala ein paar sinnvolle Grenzen.

Bemerkenswert finde ich auch wie viel lesbarer Python-Code gegenüber Scala ist.
#zitieren