it-swarm.dev

Warum verwenden Sie Scala over Java

Ich bin total begeistert von Scala als Sprache ... und ich habe immer noch Probleme damit, warum ein Unternehmen von Java zu Scala wechseln sollte. Is Scala nur syntatischer Zucker über der JVM oder gibt es grundlegende Verbesserungen in Scala over Java, die reale Anwendungen verbessern würden?

16
Dakotah North

Haftungsausschluss: Ich bin kein Scala Guru).

Scala macht zwei Dinge sehr gut, was Java (derzeit) nicht).

Lösen Sie Funktionsprobleme

  • Auf der einfachsten Ebene hat Scala hat vollwertige Verschlüsse mit Sammlungsunterstützung. Dies bedeutet, dass Sie keinen Kesselplattencode mehr schreiben müssen wie (schamlos von einem DZone-Post abgerissen)

    public List<Item> bought(User user)
    {
        List<Item> result = new ArrayList();
        for (Item item : currentItems)
        {
            if (user.bought(item))
            {
                result.add(item);
            }
        }
        return result;
    }
    

Aber schreibe stattdessen etwas wie:

def bought(user: User) = items.filter(user bought _)
  • Es gibt mehr funktionale Liebe, aber ich bin nicht qualifiziert, darüber zu sprechen, da ich momentan immer noch an funktionaler Programmierung lutsche :)

Löse die Parallelität sicherer

  • Scala hat ein Schauspieler-Modell (+ eine andere Güte), das von Natur aus sicherer ist als Javas veränderbare Daten + Sperren des Thread-Modells (egal wie gut die Bibliotheken werden, Java) = wird immer noch durch die Sprache behindert).

Ich kann mir ehrlich gesagt nicht allzu viel anderes vorstellen, was dazu führt, dass Scala Kopf und Schultern über Java stehen. Viele kleine Gewinne und Verbesserungen ja, aber auch viel mehr Seil, mit dem man sich aufhängen kann. YMMV

HTH ein wenig

19
Martijn Verburg

Das hängt von Ihrer Definition von "nur syntaktischem Zucker" ab. Inwiefern ist zum Beispiel Java mehr als nur syntaktischer Zucker über Maschinencode?

Jede Sprache kann weniger als Maschinencode, aber keine Sprache kann mehr.

Hochsprachen bringen das Lesen und Verstehen von Code, das Verfassen von Fehlern und das Abfangen von mehr Fehlern. Und meiner Meinung nach ist es das erste, das den größten Unterschied macht - genau "nur syntaktischer Zucker".

Aber wenn man nur die beiden anderen betrachtet, gibt es immer noch Vorteile von Scala gegenüber Java).

Nicht um den Punkt zu beleuchten, aber Verschlüsse zu haben, macht Code viel komponierbarer als keine Verschlüsse zu haben. Und während Java 7 etwas genannt Verschlüsse hinzufügt, werden sie das nicht sein - sie werden nur anonyme Funktionen sein.

Um mehr Fehler zu erkennen, ist Scalas überlegener Umgang mit Varianz ein Beweis dafür. Darüber hinaus verhindert die Betonung der Unveränderlichkeit auch alle Arten von Fehlern - es ist nicht so, dass Java kann nicht unveränderlich sein, aber es kommt einfach nicht mit der Bibliothek, um dies zu tun.

9

Zusätzlich zu Martijns Antwort möchte ich hinzufügen, dass Scala ist mehr ausdrucksstark als Java und Die Vorteile sind, dass (1) es Sie produktiver macht (2) weniger Code zu schreiben, um dasselbe Problem zu lösen, bedeutet, dass Sie die Fehler in Ihrem Code reduzieren können (IMHO-fehlerfreier Code ist ein Mythos).

2
sakisk

Ich benutze Scala seit ungefähr 3 Monaten und kann immer noch nichts finden, was ich in Java nicht tun könnte. Für mich buchstäblich jede Literatur über Scala scheint dasselbe zu erwähnen boilerplate. Wenn das, was Sie suchen, reduziert wird boilerplate dann Scala ist für Sie, aber IMHO, zum Beispiel könnte das oben angegebene Filterbeispiel genauso gut mit Apache-Sammlungen gelöst werden

<T> CollectionUtils.filter(Predicate<T>...)

oder verwenden Sie solche Verschlüsse

<T> CollectionUtils.forAllDo(..., Closure<T>)

Aber natürlich ausführlicher. Ich mag die Typinferenz. Wenn Sie Scala] lernen, werden Sie feststellen, dass dies wahrscheinlich sowieso unter der Haube vor sich geht. Meiner Meinung nach kommt jede Sprache mit + ve und -ve.

0
user105463