Estaba navegando por la librería Amazon.com y encontré el libro "Programación funcional para desarrolladores de Java" .
Conozco una programación funcional muy básica y he estado programando en Java durante 3 años.
Me gustaría saber si la programación funcional es incluso posible en Java.
java
functional-programming
Vinoth Kumar CM
fuente
fuente
Respuestas:
Depende de lo que entiendas por "programación funcional" y por "posible".
Obviamente, puede implementar cosas siguiendo un paradigma funcional. Sin embargo, el lenguaje Java no proporciona el azúcar sintáctico, por lo que algunas cosas serán tediosas en el mejor de los casos, y otras serán extremadamente arcanas.
Del mismo modo, puede escribir muy bien código orientado a objetos en un lenguaje reconocido como no OO, como C.
Bibliotecas Java
Hay bibliotecas que pueden ayudarlo a hacer esto, ya haciendo el trabajo por usted y ocultando las cosas arcanas:
Esto le permitirá escribir código Java con un enfoque más funcional y posiblemente una sintaxis y una semántica más familiares, como es de esperar de un lenguaje competente para FP. Dentro de lo razonable, eso es.
Idiomas JVM
Y, obviamente, puede implementar un lenguaje funcional sobre Java. Para que pueda usar ese como su lenguaje FP. Lo cual es un poco más alto nivel de abstracción de lo que pediste, pero relativamente dentro del contexto (aunque estoy engañando un poco aquí, por supuesto).
Por ejemplo, echa un vistazo a:
Lenguajes JVM más o menos funcionales
Si bien pueden no ser exactamente lo que desea, hay una serie de otros lenguajes que se han portado a la Plataforma Java y que podrían liberarlo de la naturaleza relativamente poco orientada a la diversión de Java (sí, juego de palabras) y ya le brindan más flexibilidad. Los contendientes notables como JRuby , Jython y Rhino (respectivamente para Ruby , Python y JavaScript / ECMAScript ) también ofrecen un potencial interesante para la programación funcional, aunque posiblemente no sean lenguajes de programación realmente funcionales por naturaleza. Kotlin de JetBrains, aunque reconoce claramente que no es un lenguaje funcional, admite algunas construcciones funcionales y también vale la pena echarle un vistazo.
Otras lecturas
También puede leer o mirar estos artículos o videos:
fuente
Estoy leyendo el libro que mencionaste. Es realmente bueno por cierto.
Sí, es posible ser funcional en Java. No sé hasta qué punto puede lograrlo, pero puede implementar muchos modismos de programación funcional.
Una de las cosas más importantes es tratar de codificar con la mentalidad "No mutar estados".
Por ejemplo, utiliza la palabra clave final para lograr la inmutabilidad. Si va a utilizar una estructura de datos, debe codificar en estructuras de datos inmutables. La biblioteca Google Guava ya está haciendo esto.
También para la programación concurrente, puede confiar en el marco de Akka (el modelo de actor).
Vale la pena mencionar que el bytecode de JVM no admite (al menos todavía) la optimización de llamadas de cola, una característica muy importante para los lenguajes de programación funcionales.
fuente
Sí, definitivamente es posible , de la misma manera que es posible en cualquier combinación de entorno de ejecución / lenguaje completo. Incluso puede lograr que funcione bastante bien si sabe lo que está haciendo.
Sin embargo, no estoy seguro de lo sensato que es. En particular, tenga en cuenta que no es particularmente idiomático (es decir, se verá muy extraño, tendrá que hacer algunas cosas poco convencionales y confundir a las personas que están acostumbradas a Java normal)
Terminará con un código de aspecto extraño, por ejemplo, para definir una nueva función:
Para hacer una programación funcional, normalmente necesita:
Por lo tanto, es posible como ejercicio e incluso como un interesante proyecto de pasatiempo. Pero realmente desea hacer una programación funcional seria mientras mantiene las ventajas de JVM / acceder a las bibliotecas de Java, entonces Clojure es, con mucho, su mejor opción en mi opinión.
ps ya que el núcleo de Clojure está escrito en Java, en realidad es un ejemplo de caso muy interesante de cómo hacer programación funcional en Java mientras se esconden los detalles desordenados detrás de una nueva y agradable sintaxis de lenguaje moderno. El código fuente de Clojure está en GitHub para aquellos interesados.
fuente
Es posible ser algo funcional en Java. Hacerlo es muy doloroso . En lugar de
Tienes algo como:
Y si desea una verdadera programación funcional, con cierres y funciones como objetos de primera clase, elija otro idioma. Scala, Clojure, Groovy se ejecutan en la JVM y pueden interactuar con las clases de Java heredadas. .
fuente
La respuesta es un rotundo "sí, por supuesto", sin embargo, en mi opinión, una de las características más importantes en muchos lenguajes funcionales es el excelente sistema de tipos. Nunca podrá administrar esto en Java usted mismo.
Si desea escribir programas funcionales y aún así quedarse con la JVM, puedo recomendarle a los sospechosos habituales Scala y Clojure que miren a Frege . Frege tiene un sistema de tipo y sintaxis que está muy cerca de Haskell, pero los programas se traducen directamente al código de Java y pueden interactuar con otro código de Java.
fuente
Bueno, todo tipo de cosas son posibles. Es posible hacer programación orientada a objetos en C; Simplemente no es una muy buena idea.
Java no fue diseñado para FP, por lo que si está tratando de hacer todo en un estilo puramente FP, tendrá problemas. Estarás luchando contra el idioma, en lugar de trabajar con él. Y no solo el lenguaje, también hay todas las maravillosas bibliotecas gratuitas de Java. Así que no vayas por FP puro; tome algunas de las ideas detrás de FP e intégrelas en su código Java, pero comprenda que no puede hacer eso con todas las ideas.
fuente
El equipo de OpenJDK lo alienta a descargar sus últimos binarios de OpenJDK 8 y jugar con las nuevas expresiones lambda y los nuevos modismos funcionales introducidos en la API de Colecciones (entre otros). Puede programar en un estilo funcional claro. Consulte "¿Programación funcional en Java?" para una comparación de colecciones JDK8 con bibliotecas pre Java8 como Guava, FunctionalJava y LambdaJ.
fuente
Puede parecer posible, pero no será una programación puramente funcional. Puede resultar en una programación imperativa.
No se pregunta por qué se refiere a la posible programación funcional mencionada por haylem. Aquí está:
La programación funcional no puede tener diferentes definiciones o significado, aunque puede tener muchas explicaciones.
Al igual que OOP, podemos preguntar "¿qué quieres decir con OOP?".
Definitivamente habrá muchas explicaciones, pero solo se referirá a un objetivo, el objetivo de OOP.
Lo mismo se aplica a la programación funcional .
Cuando decimos significado funcional, los programas consisten en funciones.
El papel de las funciones es devolver un argumento / parámetro evaluado (el argumento es variable, la expresión vino cuando se llamó a la función, mientras que el parámetro es variable, que es parte de la declaración de la función).
También las funciones siempre devolverán el mismo resultado cuando se pasan los mismos argumentos. De esa manera es más fácil evitar errores o depurar errores futuros. Mediante la programación funcional podemos evitar efectos secundarios como modificar la variable global.
ejemplo en JavaScript:
El incremento de la función agrega 1 valor a cada uno de los elementos dentro del objeto y devuelve el resultado. El valor de myList no cambió, pero cuando llamamos a las funciones vimos el valor agregado a los elementos de ese objeto.
Como respuesta a mi es la programación funcional posible en Java? , Creo que no es posible tener una verdadera programación funcional en java. Porque Java está realmente diseñado para ser POO en el que extiende la programación imperativa y la mejora para mantenerla. Cuando el estado de un objeto, variable, etc., ha cambiado, eso ya es una programación imperativa.
fuente