Blick über den Tellerrand: Programmiersprache Scala

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
deamon
User
Beiträge: 63
Registriert: Mittwoch 8. Oktober 2008, 11:14

Hallo,

ich denke, wenn man in Python programmiert, verwendet man ungerne andere Sprachen. Aber es gibt doch Gründe das zu tun und dann möchte man natürlich eine möglichst angenehme Sprache haben. Und zumindest von der Kompaktheit des Codes finde ich Scala Python recht ähnlich. Scala ist eine objektorientierte und funktionale Programmiersprache für die virtuelle Maschine von Java.

Die Sprache ist zwar, genau wie Java, statisch typisiert, aber da man dank Typinterferenz den Datentyp meist weglassen kann, sieht der Code fast aus wie bei einer Skriptsprache. Beispiel:

Code: Alles auswählen

// Python
x = "eine Zeichenkette"

// Scala
val x = "eine Zeichenkette"
"val" steht übrigens für "value"; für veränderlicher Werte gibt es "var".

Typische Klassendefinitionen sehen zwar ganz anders aus als in Python, aber doch sehr übersichtlich und kompakt:

Code: Alles auswählen

class EineKlasse(val x: String, val y: Int)
Die Parameterliste ist der so genannte Primärkonstruktor; bei Scala nimmt sozusagen die Klasse selbst die Parameter zur Erzeugung von Objekten entgegen. Weil vor den Variablen noch "val" steht, werden auch gleich Felder erzeugt, so dass man auf ein Feld eines Objekts mit eineInsatz.x zugreifen kann.

Hier ist ein kleines Beispiel, wo man sieht, wie Scala im Vergleich zu Python aussieht: Scala compared to Java and Python.

Beim Anblick von Scala dachte ich, dass die Sprache vielleicht Python-Programmierern gefallen könnte, auch wenn sie komplexer als Python ist.

Gruß
Christian
Zuletzt geändert von deamon am Dienstag 16. Juni 2009, 12:25, insgesamt 1-mal geändert.
lunar

Der Python-Code in dem Beispiel ist nicht so toll für den Vergleich. In Python kann man den +=-Operator auch überladen. Außerdem würde man anstelle einer inneren Klasse einfach ein Tupel nutzen:

Code: Alles auswählen

class RegexMap(object):
    def __init__(self):
        self.elements = set()

    def __iadd__(self, element):
        pattern, value = element
        if isinstance(pattern, basestring):
            pattern = re.compile(pattern)
        self.elements.add((pattern, value))

    def get(self, key, default=None):
        for value in (v for p, v in self.elements if p.match(key)):
            return value
        return default
deamon
User
Beiträge: 63
Registriert: Mittwoch 8. Oktober 2008, 11:14

Das sieht noch besser aus, da muss ich dir zustimmen. Kannst du ja mal in der verlinkten Diskussion posten.
lunar

deamon hat geschrieben:Das sieht noch besser aus, da muss ich dir zustimmen. Kannst du ja mal in der verlinkten Diskussion posten.
Gesagt, getan
BlackJack

@lunar: Das `set()` ist IMHO keine gute Idee, weil es bei solchen Sachen auch oft auf die Reihenfolge ankommt, in der die regulären Ausdrücke angewendet werden.
lunar

Stimmt natürlich. Ich hab "set()" einfach unreflektiert aus dem Original-Code übernommen, ohne groß darüber nachzudenken ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

deamon hat geschrieben:Beim Anblick von Scala dachte ich, dass die Sprache vielleicht Python-Programmierern gefallen könnte, auch wenn sie komplexer als Python ist.
Naja, du kannst meine Erfahrungen mit Scala in meinem nun schon etwas älteren Scala-Thread nachverfolgen. Seitdem habe ich mit Programming Scala zugelegt. So wie die Sprache nett ist und in 2.8 noch besser wird (Keyword-Arguments etwa) muss ich sagen dass ich nur mäßig begeistert bin. Klar, es macht schon Spaß und der funktionale Ansatz ist nicht übel, aber aus Python-Sicht ist es halt eine Sprache die JVM-Programmierung gerade so akzeptabel macht (aus Java-Sicht ist es natürlich phantastisch).

Nachteile die ich sehe: Javas Stdlib (ich mag die echt nicht), die Komplexität der Sprache (sowohl von dem Typsystem als auch von der Syntax und den Syntaxüberraschungen). Es scheinen mir sehr viele Konzepte aufeinandergestapelt worden zu sein, ob das gut ist kann ich momentan nicht abschätzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
deamon
User
Beiträge: 63
Registriert: Mittwoch 8. Oktober 2008, 11:14

War irgendwie an mir vorbei gegangen, dass Scala hier schon Thema war. Ich finde mit den syntaktischen Sonderfällen kann man ganz gut leben, schwieriger finde ich die Komplexität der Sprache und ihres Typsystems.

Aber man darf das auch nicht zu schnell verurteilen, weil es komplizierter als Python ist. Es ist ja nicht einfach nur so zum Spaß komplexer, es steckt sehr viel Gehirnschmalz drin. Fehler, die der Compiler findet, muss man nicht mehr selbst finden. Ich finde es auch in der API-Doku angenehm, wenn genau ein Typ angegeben ist. Bei Ducktyping habe ich oft das Problem, dass in der Doku nicht steht, wie etwas watscheln, schwimmen und quaken muss, um als Ente akzeptiert zu werden.

Scala hat mich auch schon auf ein paar schlechte Gewohnheiten der Programmierung aufmerksam gemacht, die mir vorher gar nicht bewusst waren, etwa "null" zurückzugeben. Aber man muss dafür auch neue Konzepte wie "Options" lernen, die die Rückgabe von "null" vermeiden.

@lunar: schön, dass du dein Python-Beispiel im Scala Forum publiziert hast.

Gruß
Christian
Antworten