Was ist so großartig an Scala?
Was macht Scala, wie eine wunderbare Sprache, anderen als das Typ-system? Fast alles, was ich gelesen habe über die Sprache bringt 'Typisierung' als einen großen Grund für die Verwendung von Scala, aber es muss mehr sein als das. Was sind die sonstigen zwingenden und/oder kühl-Sprache-Funktionen, die die Scala ein wirklich nützliches Werkzeug?
Kommentar zu dem Problem
Vielleicht sollte die Gemeinschaft der wiki-Frage? Es scheint nicht, wie es eine eindeutige Antwort.
InformationsquelleAutor der Frage Don Werve | 2009-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind einige der Dinge, die mich zugunsten Scala (über, sagen wir, üblichen Java):
a) Typ-Inferenz. Der Java-Weg, es zu tun:
.. ist ziemlich ausführliche im Vergleich zu Scala. Der compiler sollte in der Lage sein, um es herauszufinden, wenn Sie eine dieser Listen.
b) First-order-Funktionen. Wieder kann diese Funktionalität emuliert werden, mit den Klassen, aber es ist hässlich.
c) Sammlungen, die
map
undfold
. Diese beiden Unentschieden in der mit (b), und auch diese beiden sind so etwas Wünsche ich mir jedes mal, ich habe für das schreiben von Java.d) Pattern-matching und case-Klassen.
e) Abweichungen, die bedeuten, dass, wenn
S extends T
, dannList[S] extends List[T]
als gut.Werfen in einige statische Typen, die Güte als gut, und ich war verkauft auf der Sprache Recht schnell.
InformationsquelleAutor der Antwort andri
Es ist ein mash up von die besten Stücke aus einer Reihe von Sprachen, was ist nicht zu lieben:
InformationsquelleAutor der Antwort Michael
Scala ist oft vorgeführt, dass Verschlüsse und implicits. Nicht wirklich überraschend, wie fehlende Verschlüsse und explizite Eingabe sind vielleicht die zwei größten Quellen der Java-boilerplate!
Aber wenn du einmal prüfen, es ein wenig tiefer, es geht weit über Java-ohne-die-lästigen-bits, Vielleicht die größte Stärke von Scala ist nicht eine bestimmte benannte feature, aber wie gut es gelingt die Vereinheitlichung von allen erwähnten Funktionen in anderen Antworten.
Post Funktionalen
Die Vereinigung von Objektorientierung und funktionale Programmierung Beispiel: Da Funktionen Objekte sind, die Scala war in der Lage, um die Karten implementieren Sie die Funktion Schnittstelle, so, wenn Sie eine Karte zum suchen nach einem Wert, ist es nicht anders syntaktisch aus über eine Funktion, um einen Wert zu ermitteln. Die Einheit dieser Paradigmen so gut, Scala ist wahrlich ein post-funktionale Sprache.
Or-operator überladen, die erzielt wird, indem nicht wirklich mit den Betreibern, Sie sind nur Methoden verwendet, die in infix-notation. So
1 + 2
ist nur das aufrufen der+
Methode auf eine ganze Zahl. Wenn die Methode benannt wurdeplus
statt, dann würde es verwenden, wie1 plus 2
die unterscheidet sich nicht von1.plus(2)
. Möglich ist dies, da der eine andere Kombination von Funktionen; alles, was in Scala ist ein Objekt, es gibt keine primitive, also Ganzzahlen können Methoden haben.Andere Feature Fusion
Typ-Klassen wurden auch erwähnt, erreicht durch eine Kombination von higher-kinded types, singleton-Objekte, und implicits.
Andere Funktionen, die gut zusammenarbeiten, sind case-Klassen und pattern matching, so dass Sie leicht aufzubauen und zu dekonstruieren, algebraische Datentypen, ohne dass Sie manuell schreiben Sie die lästige Gleichheit, hashcode, Konstruktor und getter/setter Logik, die Java verlangt.
Angabe der Unveränderlichkeit standardmäßig bietet lazy Werte, und bieten erstklassige Funktionen, die alle kombinieren, um Ihnen eine Sprache, die sehr geeignet für Gebäude effiziente funktionale Datenstrukturen.
Die Liste geht weiter, aber ich habe mit Scala für über 3 Jahre jetzt, und ich bin immer noch erstaunt, fast täglich wie gut alles funktioniert einfach zusammen.
Effizient und Vielseitig
Scala ist auch eine kleine Sprache, mit einer Skillung, die (überraschenderweise!) muss nur etwa 1/3 der Größe von Java. Dies ist zum Teil, weil Java hat eine Menge von speziellen Fällen in der Spezifikation, dass die Scala vereinfacht Weg, der teilweise durch das entfernen von Funktionen wie primitiven und Operatoren, und Teils, weil eine Menge von Funktionen verschoben wurde, aus der Sprache und in den Bibliotheken.
Als Vorteil diese, Sie alle Techniken zur Verfügung, um die Scala-Bibliothek Autoren sind auch verfügbar, für alle Scala-Benutzer, wodurch es eine großartige Sprache für die Definition Ihrer eigenen Kontrolle-flow-Konstrukte und für den Bau von DSLs. Dies wurde verwendet, um große Wirkung in Projekten wie Akka - ein 3rd-party-Akteur-framework.
Tief
Schließlich skaliert die volle Bandbreite der Programmier-Stile.
Den runtime-interpreter (auch bekannt als die REPL) können Sie sehr schnell Ideen zu erforschen, die in einer interaktiven Sitzung und Scala-Dateien können auch ausgeführt werden, als Skripte ohne explizite Zusammenstellung. Wenn gepaart mit Typ-Inferenz, gibt Scala-das Gefühl einer dynamischen Sprache wie Ruby, Perl oder bash-Skript.
Am anderen Ende des Spektrums, Merkmale, Klassen, Objekte und selbst-Typen können Sie bauen ein full-scale enterprise-system basiert auf verschiedenen Komponenten und der Verwendung von dependency-Injektion ohne die Notwendigkeit für 3rd-party-tools. Scala auch die Integration mit Java-Bibliotheken auf eine Ebene, die fast auf Augenhöhe mit nativen Java und laufen auf der JVM nutzen können die Geschwindigkeit Vorteile auf, die Plattform, als auch als durchaus brauchbar in Containern wie tomcat oder mit OSGi.
InformationsquelleAutor der Antwort Kevin Wright
Ich bin neu in der Scala, aber mein Eindruck ist:
Wirklich gute JVM-integration wird der treibende Faktor sein. JRuby aufrufen können java-und java aufrufen kann JRuby-code, aber es ist explizit aufrufen in eine andere Sprache, nicht die saubere integration von Scala-Java. So können Sie verwenden, Java-Bibliotheken, und sogar mix und match im gleichen Projekt.
Suchte ich in der scala, wenn ich hatte eine Erkenntnis, dass das, was fahren der nächste große Sprache ist einfach Parallelität. Die JVM hat eine gute Parallelität vom performance-Standpunkt aus. Ich bin sicher, jemand wird sagen, dass Erlang ist besser, aber Scala ist tatsächlich nutzbar, die von normalen Programmierern.
Wo Java fällt ist, dass es nur so schmerzhaft langatmig. Es dauert viel zu viele Charaktere zu erstellen, und übergeben Sie einen Funktor. Scala erlaubt die übergabe von Funktionen als Argumente an.
Ist es nicht möglich, in Java zu erstellen, die ein union-Typ oder eine Schnittstelle zu einer vorhandenen Klasse. Diese sind sowohl einfach in Scala.
Statische Typisierung hat in der Regel eine große Strafe von verboseness. Scala beseitigt diesen Nachteil, während noch geben dem Kopf der statische Typisierung, die der Kompilierung die Typüberprüfung, und es macht die code-assist in den Editoren zu erleichtern.
Die Möglichkeit zum erweitern der Sprache. Dies hat das Ding gehalten hat, dass Lisp geht seit Jahrzehnten, und das erlaubt Ruby on Rails.
InformationsquelleAutor der Antwort Kevin Peterson
Den Typ system ist wirklich Scala unterscheidende Merkmal. Es hat auch eine Menge von syntaktischen Bequemlichkeiten über, sagen wir, Java.
Aber für mich, die leistungsfähigsten features von Scala sind:
In der Wirkung, die diese Funktionen lassen Sie die Ungefähre (und in mancher Hinsicht übertreffen) Haskell s Typ-Klassen. Kombiniert, lassen Sie Sie schreiben, außergewöhnlich modularer code.
InformationsquelleAutor der Antwort Apocalisp
Nur kurz:
Was finde ich besonders attraktiv in all seinen herrlichen Eigenschaften, unter anderem:
InformationsquelleAutor der Antwort thSoft
Funktionale Programmierung gebracht JVM
InformationsquelleAutor der Antwort Jhonny D. Cano -Leftware-
Angeblich ist es sehr einfach zu machen Scala code ausführen gleichzeitig auf mehreren Prozessoren.
InformationsquelleAutor der Antwort Chase Seibert
Ausdruckskraft der Ablaufsteuerung. Es ist zum Beispiel sehr Häufig auf eine Sammlung von Daten, die Sie verarbeiten müssen in bestimmter Weise. Dies könnte eine Liste von Geschäften in denen die Verarbeitung umfasst die Gruppierung, indem Sie einige Eigenschaften (die Währungen der Anlageinstrumente) und dann ein Summen (Summen pro Währung vielleicht).
In Java-dieses beinhaltet die Trennung ein Stück code zu tun, der Gruppierung (ein paar Zeilen der for-Schleife) und dann ein anderes Stück code zu tun, die Summe (eine weitere for-Schleife). In Scala, diese Art der Sache ist in der Regel erreichbar in nur einer Zeile code mit funktionaler Programmierung und dann Falten, die liest sehr ausdrucksvoll l-zu-r -.
Natürlich ist dies nur ein argument für eine funktionale Sprache, die über Java.
InformationsquelleAutor der Antwort oxbow_lakes
Die großartigen features von Scala wurde bereits erwähnt. Eine Sache, die scheint durch Vergangenheit alle features, obwohl, ist, wie geschmackvoll, alles ist integriert.
Scala verwaltet werden, eine der mächtigsten Sprache um, ohne ein Gefühl angeschraubt Funktionen in haste. Weder sind die Sprache, die eine Akademische übung in beweisen einen Punkt. Innovation und wirklich fortschrittliche Konzepte gebracht werden, in der Sprache, mit unheimlicher Praktikabilität und Eleganz.
Kurz: Martin Odersky ist eine Reine design-Genie. Das ist das, was ist so toll an der Scala!!
InformationsquelleAutor der Antwort John Nilsson
Möchte ich hinzufügen, dass die multi-Paradigma (OO und FP) die Natur bietet Scala einen Vorteil über andere Sprachen
InformationsquelleAutor der Antwort GClaramunt
Jeden Tag können Sie Java-code werden Sie mehr und mehr unglücklich, jeden Tag code Scala wirst du glücklicher werden.
InformationsquelleAutor der Antwort Bryan Hunt
Hier ein paar ziemlich in die Tiefe der Erklärungen für die Attraktivität von funktionalen Sprachen.
Wie/warum funktionalen Programmiersprachen (besonders Erlang) gut skalieren?
InformationsquelleAutor der Antwort Spencer Ruport
Wenn wir aufgeben feature Diskussion und sprechen über Stil, ich würde sagen, es ist der pipe-line Stil der Codierung. Sie beginnen mit einigen Objekt oder eine Sammlung, die Typen Punkt und der Eigenschaft oder der Punkt-und transformation und tun es, bis Sie die gewünschte form ergeben. Auf diese Weise ist es leicht zu schreiben, eine Kette von transoformations, die leicht sein wird, Sie zu Lesen, auch. Merkmale, um einige zu verlängern, können Sie den gleichen Ansatz für die Erstellung von Arten.
InformationsquelleAutor der Antwort Alexey