2014-02-11 10 views
20

Ganz am Ende, this article neue Einführung von Java 8 Optional, heißt es, dassUnterschied zwischen Java Optional und Scala Option

Optional als Option bei weitem nicht so mächtig ist, [T] in Scala (aber bei es am wenigsten erlaubt kein Wrapping von null). Die API ist nicht so geradlinig wie Null-Handling und wahrscheinlich viel langsamer. Aber die Nutzen der Kompilierung-Überprüfung sowie die Lesbarkeit und Dokumentation Wert Optional konsequent genutzt stark übertrifft Nachteile

Ich habe eine sehr grundlegende Kenntnisse der Scala und ich bin immer vertraut mit Java 8 Optional, so auf ein Auf den ersten Blick ist mir nicht klar, welche Unterschiede zwischen den beiden bestehen.

Ich weiß zum Beispiel, dass in Scala kann ich passende verwenden Muster Option zu testen und mein Leben leichter zu machen. Aber abgesehen von den Features der Scala-Syntax würde ich gerne wissen, ob ich etwas mit Option in Scala machen kann, was ich nicht mit Optional in Java machen kann.

Hoffe, das ist nicht als dumme Frage markiert, aber jedes Mal, wenn ich das "mächtig" lese, fliegen Fragezeichen über meinen Kopf.

+0

Wenn Syntax Unterschiede zwischen Scala und Java dem Gültigkeitsbereich sind, was bleibt, anders als die Schnittstelle zu 'Option' und' Optional' anders zu sein? Oder gibt es noch etwas, das du herausholen willst? –

+0

der Artikel-Link ist gebrochen – Scorpion

+4

Nein. Es ist nicht kaputt. * NoBlogDefFound * ist der Blog-Name. – Naetmul

Antwort

13

Wenn wir über Unterschiede reden, die nicht Syntax-verwandt ist, Tomasz Nurkiewicz ziemlich Höhepunkte der größten in den einleitenden Abschnitten seiner Blog-Post:

Optional offensichtlich in Java 8 so eingeführt wurde, es ist nicht in der Standard-Java-Bibliothek - und wird nie für die Abwärtskompatibilität Gründen verwendet werden.

(emph mine -. Obwohl ich nicht so unnachgiebig sein würde, auf „nie“, angesichts der neuen default Methoden)

So ist der größte Unterschied, und der größte Vorteil der Scala Option, scheint zu sein, einfach , dass es viel enger in die Sprache API integriert ist.

Zunächst ist es sehr wahrscheinlich, dass Sie sehr früh mit ihm in Kontakt kommen, und somit auch zu seinem Nutzungsverhalten, wenn Sie anfangen, Scala zu benutzen - vor allem durch Scalas Map#get. Wenn Sie Scala's Option API betrachten, werden Sie sehen, dass es in die Sammlungshierarchie von Scala "gespleißt" ist, was bedeutet, dass Sie es transparent als Sammlung verwenden können, wann immer Sie es brauchen - z. ohne, sagen wir, der Endentwickler Ihrer Bibliothek, der sich jemals mit seinen Besonderheiten beschäftigt.

+0

Auch gibt es sicherlich Unterschiede in der Art, wie der Compiler typische Nutzungsmuster in beiden Sprachen behandelt. Zum Beispiel, wenn Sie Muster übereinstimmen gegen 'Some' oder' None' in Scala, der aktuelle Compiler (2.10.x) wird zunächst über 'instanceof' typecheck und nur dann möglicherweise den Wert extrahieren.Ob dies schneller ist als das, was 'Optional' macht (wahrscheinlich Feldladen, Vergleichen mit 'Null' und Verzweigen, je nachdem, ob es das ist), w.r.t zu JIT, ist natürlich eine andere Geschichte. –

+1

Ich denke, ein weiterer Faktor ist Scala, im Gegensatz zu Java entmutigt die Verwendung von Null-Referenzen. Das allein würde die Nützlichkeit von Javas Optionale in der realen App reduzieren, denke ich ... – seand

+0

@seand: yup, das ist ziemlich viel eine der Implikationen (oder wahrscheinlicher, Ursachen) von "Option" in die API integriert zu werden. Aber ich glaube nicht, dass irgendjemand bei klarem Verstand Javas "Optional" im Scala-Code verwenden würde, wenn Sie das meinen. –