Je parcourais la librairie Amazon.com et je suis tombé sur le livre "Programmation fonctionnelle pour les développeurs Java" .
Je connais une programmation fonctionnelle très basique et je programme en Java depuis 3 ans.
J'aimerais savoir si la programmation fonctionnelle est même possible en Java?
java
functional-programming
Vinoth Kumar CM
la source
la source
Réponses:
Cela dépend de ce que vous entendez par "programmation fonctionnelle" et par "possible".
Vous pouvez évidemment mettre en œuvre des choses suivant un paradigme fonctionnel. Cependant, le langage Java ne fournit pas le sucre syntaxique pour cela, de sorte que certaines choses seront fastidieuses au mieux, et que d'autres seront extrêmement obscures.
De même, vous pouvez très bien écrire du code orienté objet dans un langage reconnu comme étant non-OO, comme C.
Bibliothèques Java
Il existe des bibliothèques qui peuvent vous aider à le faire, en faisant déjà le travail pour vous et en cachant les choses obscures:
Celles-ci vous permettront d’écrire du code Java avec une approche plus fonctionnelle et éventuellement une syntaxe et une sémantique plus familières, comme vous le voudriez d’un langage compétent en FP. Dans la raison, c'est.
Langues JVM
Et évidemment, vous pouvez implémenter un langage fonctionnel au-dessus de Java. Pour que vous puissiez ensuite utiliser celui-ci comme langue de PF. Ce qui est un peu un niveau d'abstraction plus élevé que ce que vous avez demandé, mais relativement dans le contexte (bien que je triche un peu ici, d'accord).
Par exemple, consultez:
Langages JVM fonctionnels plus ou moins fonctionnels
Même s’ils ne sont peut-être pas exactement ce que vous voulez, il existe un certain nombre de langages qui ont été portés sur la plate-forme Java et qui pourraient vous libérer de la nature relativement peu amusante de Java (oui, le jeu de mots) et vous en donner déjà plus. souplesse. Des concurrents notables comme JRuby , Jython et Rhino (respectivement pour Ruby , Python et JavaScript / ECMAScript ) offrent également un potentiel intéressant pour la programmation fonctionnelle, même s’ils ne sont pas vraiment des langages de programmation fonctionnels par nature. Kotlin de JetBrains, tout en reconnaissant clairement que ce n'est pas un langage fonctionnel, supporte certaines constructions fonctionnelles et mérite également un coup d'oeil.
Lectures complémentaires
Vous voudrez peut-être aussi lire ou regarder ces articles ou vidéos:
la source
Je lis le livre que vous avez mentionné. C'est vraiment bon BTW.
Oui, il est possible d'être fonctionnel en Java. Je ne sais pas dans quelle mesure vous pouvez y arriver, mais vous pouvez implémenter de nombreux idiomes de programmation fonctionnels.
L’une des choses les plus importantes est d’essayer de coder avec la mentalité «Ne pas muter d’états».
Par exemple, vous utilisez le mot-clé final pour obtenir l'immutabilité. Si vous souhaitez utiliser une structure de données, vous devez coder dans des structures de données immuables. La bibliothèque Google Guava le fait déjà.
Également pour la programmation simultanée, vous pouvez compter sur le cadre Akka (le modèle d'acteur).
Il est à noter que le bytecode de la machine virtuelle Java ne prend pas en charge (du moins pour le moment) l’optimisation d’appel en queue, une fonctionnalité très importante pour les langages de programmation fonctionnels.
la source
Oui, c'est tout à fait possible , de la même manière que dans n'importe quelle combinaison langage / environnement d'exécution complet. Vous pouvez même obtenir de bons résultats si vous savez ce que vous faites.
Je ne sais pas à quel point c'est raisonnable. Sachez en particulier qu’il n’est pas particulièrement idiomatique (c’est-à-dire que cela aura l’air très étrange, vous devrez faire des choses non conventionnelles et dérouter des gens habitués à Java habituel)
Vous allez vous retrouver avec un code étrange, par exemple pour définir une nouvelle fonction:
Pour faire de la programmation fonctionnelle, vous avez généralement besoin de:
C'est donc possible comme exercice et même comme projet de loisir intéressant. Mais vous voulez vraiment faire de la programmation fonctionnelle sérieuse tout en conservant les avantages de la JVM / accès aux bibliothèques Java, alors Clojure est de loin votre meilleure option à mon avis.
ps étant donné que le noyau de Clojure est écrit en Java, il s’agit en fait d’un exemple de cas très intéressant illustrant la programmation fonctionnelle en Java, tout en masquant les détails compliqués d’une belle nouvelle syntaxe de langage moderne. Le code source de Clojure est sur GitHub pour les personnes intéressées.
la source
Il est possible d'être quelque peu fonctionnel en Java. Cela est très douloureux . Au lieu de
Vous avez quelque chose comme:
Et si vous voulez une vraie programmation fonctionnelle, avec des fermetures et des fonctions comme objets de première classe, choisissez un autre langage. Scala, Clojure, Groovy s’exécutent tous sur la machine virtuelle Java et peuvent interagir avec les classes Java héritées. .
la source
La réponse est un "oui, bien sûr" retentissant, mais à mon avis, l'une des caractéristiques les plus importantes de nombreux langages fonctionnels est l'excellent système de types. Vous ne pourrez jamais gérer cela vous-même en Java.
Si vous souhaitez écrire des programmes fonctionnels tout en restant dans la machine virtuelle, je peux vous recommander, parmi les suspects habituels, Scala et Clojure, d’examiner Frege . Frege a une syntaxe et un système de types très proches de Haskell, mais les programmes sont traduits directement en code java et peuvent interagir avec d'autres codes java.
la source
Eh bien, toutes sortes de choses sont possibles. Il est possible de faire de la programmation orientée objet en C; ce n'est tout simplement pas une très bonne idée.
Java n'a pas été conçu pour la FP, donc si vous essayez de tout faire dans un style purement FP, vous aurez des problèmes. Vous allez combattre la langue, au lieu de travailler avec elle. Et pas seulement la langue - il y a aussi toutes les merveilleuses bibliothèques Java gratuites. Alors n'allez pas pour la pure FP; Prenez quelques-unes des idées derrière FP et intégrez-les dans votre code Java, mais comprenez que vous ne pouvez pas le faire pour toutes les idées.
la source
L’équipe OpenJDK vous encourage à télécharger les derniers fichiers binaires OpenJDK 8 et à vous amuser avec les nouvelles expressions lambda et les nouveaux idiomes fonctionnels introduits dans l’API Collections (entre autres). Vous pouvez programmer dans un style fonctionnel clair. Voir "Programmation fonctionnelle en Java?" pour une comparaison de collections JDK8 avec des bibliothèques antérieures à Java8 telles que Guava, FunctionalJava et LambdaJ.
la source
Cela peut sembler possible, mais ce ne sera pas une programmation purement fonctionnelle. Cela peut entraîner une programmation impérative.
Il n’ya pas à se demander pourquoi il entend par possible programmation fonctionnelle, comme le mentionne haylem. C'est ici:
La programmation fonctionnelle ne peut pas avoir une définition ou un sens différent, bien qu’elle puisse avoir de nombreuses explications.
Comme la programmation orientée objet, pouvons-nous demander "qu'entendez-vous par la programmation orientée objet?".
Il y aura certainement beaucoup d'explications, mais cela ne concernera qu'un seul objectif, l'objectif de la programmation orientée objet.
La même chose s'applique à la programmation fonctionnelle .
Lorsque nous parlons de signification fonctionnelle, les programmes sont constitués de fonctions.
Le rôle des fonctions est de renvoyer un argument / paramètre évalué (argument est variable est l'expression utilisée lors de l'appel de la fonction alors que paramètre est une variable qui fait partie de la déclaration de fonction).
De plus, les fonctions renverront toujours le même résultat lorsque les mêmes arguments sont passés. De cette façon, il est plus facile d’éviter les bugs ou de déboguer les futurs bugs. Grâce à la programmation fonctionnelle, nous pouvons éviter les effets secondaires tels que la modification de la variable globale.
exemple en JavaScript:
L'incrément de fonction ajoute 1 valeur à chacun des éléments à l'intérieur de l'objet et renvoie le résultat. La valeur de myList n'a pas changé, mais lorsque nous avons appelé les fonctions, nous avons constaté la valeur ajoutée des éléments de cet objet.
En réponse à La programmation fonctionnelle est-elle possible en Java? , Je crois qu’il n’est pas possible d’avoir une vraie programmation fonctionnelle en Java. Parce que java est vraiment conçu pour être une POO dans laquelle il étend la programmation impérative et l’améliore pour la maintenabilité. Lorsque l'état d'un objet, d'une variable, etc. a changé, la programmation est déjà impérative.
la source