Ich stehe total auf Scala als Sprache ... und habe immer noch Probleme damit, warum ein Unternehmen von Java auf Scala wechseln sollte. Ist Scala nur syntatischer Zucker auf der JVM oder gibt es grundlegende Verbesserungen in Scala gegenüber Java, die reale Anwendungen verbessern würden?
16
Antworten:
Haftungsausschluss: Ich bin kein Scala-Guru.
Scala macht zwei Dinge sehr gut, die Java (derzeit) nicht macht.
Funktionsprobleme lösen
Auf der einfachsten Ebene hat Scala Schließungen mit Unterstützung für Sammlungen abgeschlossen. Dies bedeutet, dass Sie keinen Kesselschildcode mehr schreiben müssen, wie z. B. (schamlos von einem DZone-Beitrag abgerissen).
Aber schreibe stattdessen etwas wie:
Lösen Sie Nebenläufigkeiten sicherer
Ich kann ehrlich gesagt nicht über allzu viel nachdenken, was Scala über Java erhebt. Viele kleine Gewinne und Verbesserungen ja, aber auch viel mehr Seil zum Aufhängen. YMMV
HTH ein bisschen
quelle
Das hängt von Ihrer Definition von "nur syntaktischem Zucker" ab. Inwiefern ist Java beispielsweise mehr als nur syntaktischer Zucker über Maschinencode?
Jede Sprache kann weniger als Maschinencode, aber keine Sprache kann mehr.
Was Hochsprachen auf den Tisch bringen, ist, dass Code leichter zu lesen und zu verstehen, leichter zu komponieren und mehr Fehler zu erkennen ist. Und meiner Meinung nach ist dies der erste, der 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 den Code komponierbarer, als keine Verschlüsse zu haben. Und während Java 7 so genannte Closures hinzufügt , wird dies nicht der Fall sein - es handelt sich lediglich um anonyme Funktionen.
Wenn es darum geht, mehr Fehler zu finden, ist der überlegene Umgang von Scala mit Abweichungen der Beweis dafür. Darüber hinaus verhindert die Betonung der Unveränderlichkeit auch alle Arten von Fehlern - Java kann zwar keine unveränderlichen Aktionen ausführen, verfügt jedoch nicht über die entsprechende Bibliothek.
quelle
Hinzu kommt die Antwort von Martijn würde Ich mag hinzufügen , dass Scala mehr expressive als Java und die Vorteile sind , dass (1) es macht Sie produktiver (2) weniger Code zu schreiben , um die gleiche Problemlösung , dass Sie die Fehler reduzieren können in Ihrem Code (IMHO fehlerfreier Code ist ein Mythos).
quelle
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 auf Scala jede Literatur scheint die gleiche Sache zu erwähnen vorformulierten . Wenn Sie nach einer Reduzierung des Boilerplates suchen, ist Scala genau das Richtige für Sie, aber IMHO. Beispielsweise könnte das oben angegebene Filterbeispiel auch mit Apache-Sammlungen gelöst werden
oder verwenden Sie Verschlüsse wie folgt
Aber natürlich ausführlicher. Ich mag die Typinferenz. Wenn Sie Scala lernen, werden Sie feststellen, dass dies wahrscheinlich sowieso unter der Haube geschieht. Meiner Meinung nach kommt jede Sprache mit + ve und -ve.
quelle
Listenverständnis, für das Verständnis.
In Java schreiben Sie zum Beispiel:
In Scala ist derselbe Code viel eleganter geschrieben (wie Python) als:
und fertig.
Es gibt so viel, was Scala bietet, dass Java nicht bietet. Es gibt einfach überhaupt keinen Vergleich. Das einzige Problem ist, dass die Leute mit Java besser vertraut sind (das ist es, was sie in CS-Kursen unterrichten) und noch nicht so gut mit dem Scala-Paradigma vertraut sind.
Scala hat eine Tail-Rekursion, es kann Tupel zurückgeben (etwas, das ich in Java 8 denke).
Es ist kein Vergleich. Scala wurde von Martin Ordersky entwickelt, der im Kernteam von Java Generics arbeitete.
Scala ist nur eine weit überlegene Sprache. Das ist alles dazu. Leute, die etwas anderes sagen, haben Scala einfach nicht genug erkundet, um es besser zu wissen.
Oben wollte ich Schwanzrekursionsoptimierung sagen (die die JVM nicht so ausführen kann, wie es der Compiler von Scala kann).
Scala wird auch schneller kompiliert und ausgeführt als JVM-Apps (Ja, das stimmt). Ganz zu schweigen von den Frameworks. Wir verwenden beispielsweise Tomcat und implementieren einige Servelets für die Verarbeitung von REST.
Eine Sache, die Tomcat nicht kann, sind asynchrone Vorgänge, die nicht blockierende E / A erfordern. Zu diesem Zweck haben JAVA-Entwickler in der Regel eine Problemumgehung mithilfe einer Nachrichtenwarteschlange erfunden (senden Sie die Nachricht an die Warteschlange, und ein anderer Prozess oder Thread nimmt sie auf und führt im Hintergrund die gewünschten Aktionen aus).
Leider ist diese Methode cr * p und ein Hack über die Einschränkungen der Bereitstellung von Java-Servlets auf Tomcat.
Gehen Sie Akka + Spray auschecken. Es werden die Schauspieler von Scala verwendet (Schauspieler sind wie Threads, mit der Ausnahme, dass sie nur über Nachrichten kommunizieren können).
Und fertig, asynchrone REST-Aufrufe leicht gemacht. Lang andauernde Hintergrundaufgabe? Kein Problem. Feuern Sie einfach und vergessen Sie, und führen Sie von Zeit zu Zeit ein REST-Polling durch, um den Status des Frontends zu überprüfen.
Wenn Sie immer noch Java verwenden und der Meinung sind, dass es besser ist als Scala, können Sie genauso gut aufhören, Ihren Computer zum Tippen zu verwenden, und zurück zu den Tagen der Federkiels und des Schreibens bei Kerzenlicht gehen. Java ist im Vergleich zu Scala im Grunde genommen ein Antidiluvianer.
quelle
int myVar = condition ? someValue : otherValue
//some value
//other value
Kommentare bearbeiten, um sie zu/*some value*/
formatieren. Die Syntaxhervorhebung wird derzeit