titledborder seticon setborder redimensionar programacion icon java scala optional scala-option

setborder - seticon java jlabel



Diferencia entre Java Opcional y OpciĆ³n Scala (2)

Me gustaría agregar a la respuesta anterior que, aparte de que Java Opcional no está integrado en la biblioteca java estándar (y otras bibliotecas, por supuesto), hay otra gran diferencia.

Java opcional no es serializable y, como tal, no se puede usar en campos de cualquier Java Beans que deban ser serializables.

Especificaciones opcionales de Java: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

Especificación de la opción de Scala: https://www.scala-lang.org/api/2.12.x/scala/Option.html

Al final, este artículo que presenta la nueva versión Optional de Java 8, establece que

Opcional no es tan poderoso como la Opción [T] en Scala (pero al menos no permite el ajuste nulo). La API no es tan sencilla como el manejo de nulos y probablemente sea mucho más lenta. Pero el beneficio de la verificación en tiempo de compilación más la legibilidad y el valor de la documentación de la Opcional utilizada consistentemente supera ampliamente las desventajas

Tengo un conocimiento muy básico de Scala y me estoy familiarizando con Java 8 Optional , por lo que a primera vista no me queda claro cuáles son las diferencias entre los dos, si es que las hay.

Sé, por ejemplo, que en Scala puedo usar la coincidencia de patrones para probar Option y hacer mi vida más fácil. Pero, excluyendo cuáles son las características de la sintaxis de Scala, me gustaría saber si hay algo que pueda hacer con la Option en Scala que no pueda hacer con la Optional en Java.

Espero que esto no esté marcado como una pregunta tonta, pero cada vez que leo eso ''poderoso'', los signos de interrogación pasan por encima de mi cabeza.


Si estamos hablando de diferencias que no están relacionadas con la sintaxis, Tomasz Nurkiewicz resalta bastante bien la más grande en los párrafos iniciales de su blog:

Opcional se introdujo en Java 8, por lo que obviamente no se usa en la biblioteca estándar de Java , y nunca lo será por razones de compatibilidad con versiones anteriores.

(enf. mío, aunque no sería tan inflexible en "nunca", dados los nuevos métodos default )

Entonces, la mayor diferencia, y la mayor ventaja de la Option de Scala, parece ser simplemente que está mucho más integrada en la API del lenguaje .

En primer lugar, es muy probable que se exponga a él y, por lo tanto, a su patrón de uso, al comenzar a usar Scala, especialmente a través del Map#get de Scala.

E inversamente, si observa la Opción API de Scala, verá que se "empalma" en la jerarquía de recopilación de Scala, lo que significa que puede usarla de forma transparente siempre que lo necesite, por ejemplo, sin, digamos, el desarrollador final de su Biblioteca que trata siempre de sus particularidades.