J'ai vu tellement de choses récemment sur la programmation fonctionnelle et Clojure semble particulièrement intéressant. Bien que je `` comprenne '' la description de base de ce que c'est, je ne peux pas comprendre comment je l'utiliserais au quotidien en tant que développeur Web, si je le peux. Une grande partie de ce que j'ai lu se concentre sur le côté mathématique de la programmation fonctionnelle plutôt que sur les situations de programmation typiques trouvées dans l'OO ordinaire.
Ai-je la mauvaise extrémité du bâton? La programmation fonctionnelle est-elle totalement indépendante du développement Web? Sinon, existe-t-il des exemples de son utilisation "pour le Web"?
Quelques exemples du haut de ma tête:
La programmation fonctionnelle correspond très bien aux applications Web. L'application Web reçoit une demande HTTP et produit un résultat HTML. Cela pourrait être considéré comme une fonction des requêtes aux pages.
Comparez avec les applications de bureau, où nous avons généralement un processus long, une interface utilisateur dynamique et un flux de données dans plusieurs directions. Ceci est plus adapté à OO qui se préoccupe des objets avec passage d'état et de message.
La programmation fonctionnelle pure peut ne pas correspondre très bien à l'environnement de programmation Web. Mais le principal obstacle est simplement le manque d'infrastructures (frameworks et API). Il faudra beaucoup de temps (probablement jamais, honnêtement) avant qu'un langage fonctionnel ait un environnement de programmation Web aussi riche que Java, Python ou Ruby.
Cela dit, il existe certaines options.
Je n'ai aucune expérience avec ces derniers. Peut-être que les commentateurs peuvent peser sur ce qui a bien fonctionné pour eux.
Je ne vois pas pourquoi - tant que vous fournissez du HTML conforme aux normes aux navigateurs, ils ne se soucient pas de ce que vous avez utilisé pour le produire, que ce soit un langage fonctionnel, un langage impératif ou des singes entraînés.
Twitter a réécrit leur backend en Scala , un langage JVM qui prend en charge les paradigmes orienté objet et fonctionnel.
De plus, le framework web Lift est écrit en Scala.
Pour Clojure, il y a une startup intéressante (TheDeadline) qui s'est développée en utilisant Clojure et Google App Engine. Ils ont un bon ppt sur Slideshare et une interview sur InfoQ.
Pour une bonne discussion sur le déploiement de Clojure avec GAE: http://news.ycombinator.com/item?id=1239788
Pour autant que je sache, Clojure possède quelques bibliothèques de développement Web. Compojure Ring Conjure
J'espère que cela répond à certaines de vos questions =) (je commence juste aussi ..)
Cordialement, Ryan
Découvrez Votre/Web . Il est très rapide et son système de type statique connaît des choses comme HTML et SQL, il peut donc garantir toutes sortes de bonnes choses sur la sécurité.
Erlang semble être beaucoup utilisé dans certaines des infrastructures d'applications Web évolutives. les bases de données CouchDB et Riak sont écrites principalement en Erlang, tout comme le serveur de mise en file d'attente de messages RabbitMQ. L'une des clés de son succès est qu'il gère la concurrence par le biais de la transmission de messages, sans état mutable partagé. C'est cette façon de penser les problèmes qui est utile, plus que tout langage de programmation fonctionnel particulier.
Ou regardez MapReduce. C'est une façon très fonctionnelle de voir le calcul, même si vos fonctions de mappage et de réduction sont en état interne - et pour cette raison, c'est un très bon moyen d'interroger de grands ensembles de données d'une manière distribuée tolérante aux pannes.
Par tous les moyens, allez avec ce qui vous semble le plus pratique. Mais gardez toujours la programmation fonctionnelle à l'esprit, car vous ne savez jamais quand elle pourrait vous être utile.
Il n'est pas totalement étranger au développement Web. L'application installée sur le serveur peut très bien profiter des fonctionnalités telles que les fermetures, les fonctions d'ordre supérieur, l'immuabilité, la transparence référentielle ... par exemple, vous avez certainement des collections que vous devez transformer ou manipuler de quelque manière que ce soit. La programmation fonctionnelle aide ici, et c'est pour une raison que ses idiomes pénètrent les langages traditionnels. Les fonctionnalités fonctionnelles contribuent à la concision, à la testabilité, à la parallélisation et peuvent également fournir des solutions natives aux problèmes que vous auriez autrement résolus avec des modèles.
Mise à jour: il existe également des frameworks web pour les langages fonctionnels. Weblocks pour LISP commun, ascenseur pour Scala. Ce sont ceux dont j'ai entendu parler, il pourrait y en avoir plus ... mais vous ne devez pas nécessairement être purement fonctionnel - par exemple Scala n'est pas pur et devrait fonctionner avec n'importe quel Java framework, vous pourrez toujours utiliser la programmation fonctionnelle pour la couche métier, etc.
Javascript (le langage de la partie FE du Web et de plus en plus le BE aussi) n'est pas fonctionnel en soi mais les fonctions sont fonctionnelles de premier ordre
La langue et le paradigme n'ont pas d'importance pour les applications Web, ils sont tous aussi bons que mauvais. Si vous cherchez une raison d'apprendre un nouveau paradigme, plongez-vous. Mon conseil serait d'analyser le problème que vous essayez de résoudre et de sélectionner le jeu d'outils approprié.
Ils font un peu des choses plutôt cool à l'Université d'Edimbourg avec une programmation fonctionnelle pour le web.
Voici une expérience de développeur Web dans la création d'applications Web à l'aide de Haskell . Bien que les langages fonctionnels soient très sûrs pour les types et aient une bonne simultanéité, ils manquaient toujours des meilleurs api de la race car il était chéri du monde universitaire depuis longtemps et n'avait pas encore été fortement adopté dans le monde réel. J'espère que ce n'est pas trop loin. Erlang y était déjà entré.
Nous venons de lancer une feuille de calcul en ligne où le backend est entièrement écrit en Erlang.
Selon toutes les normes, c'est l'une des applications Web les plus complexes que vous pouvez créer avec une interface graphique ginormous avec une complexité mentale.
Une autre réponse courte: http://www.mlstate.com - une plate-forme de développement Web complète, basée sur FP. La sémantique propre du langage permet toutes sortes d'analyses automatisées de sûreté et de sécurité, d'optimisations, etc.
Mise en garde: je travaille là-bas.
Les langages fonctionnels peuvent ne pas être directement utiles pour créer de superbes applications, mais nous utilisons fortement le paradigme de programmation fonctionnelle pour créer nos applications. La programmation fonctionnelle pure met la contrainte "pas d'effets secondaires". Cela garantit que les appels fonctionnels purs produiront le même résultat dans l'ordre de leur appel. Ce n'est pas idéal pour le développement Web, mais si la programmation fonctionnelle est combinée avec un système à changement d'état, une application Web robuste peut être construite. Jetez un œil à mon article pour plus de détails: FAST Server Aussi ces slides .
La raison pour laquelle la programmation fonctionnelle est populaire avec la programmation Web est qu'elle explique l'état partagé et changeant et permet au programmeur d'exprimer les parties purement fonctionnelles comme des fonctions pures. Les fonctions pures ont l'avantage d'être très simples à exécuter en parallèle - car elles n'ont pas d'effets secondaires.
C'est du moins ma raison.
Oui, car la programmation fonctionnelle peut être effectuée dans n'importe quel langage, vous pouvez l'utiliser quotidiennement en tant que développeur Web.
Devrais-tu? cela dépend du problème que vous résolvez. La programmation fonctionnelle est un paradigme de programmation et où vous devez l'utiliser dépend du problème que vous résolvez.
Pour rendre la décision plus simple, demandez-vous s'il est plus facile de résoudre un problème en utilisant les concepts de POO, où l'encapsulation, le polymorphisme, les fonctions de type héritage peuvent vous faciliter la vie?
Si oui, n'y allez pas pour une programmation fonctionnelle et utilisez simplement des POO. Si votre application doit effectuer un calcul/calcul/logique métier complexe et impliquant un traitement fortement simultané, la programmation fonctionnelle peut offrir de nombreux outils et avantages dans de tels cas.
Ce ne sont que différents styles de construction de la structure et des éléments des programmes, donc il s'agit d'utiliser le bon outil pour le bon travail. Tout peut être fait en utilisant n'importe quoi.
Programmation fonctionnelle dans le développement web:
JavaScript prend en charge la programmation fonctionnelle et il est très utile lorsque nous sommes dans le contexte du développement Web.Le cadre réactif est fortement influencé par les principes de programmation fonctionnelle et utilisé dans de nombreuses applications Web.
En outre, vous pouvez trouver de nombreuses applications Web conçues et exécutées avec des cadres développés sur les langages de programmation fonctionnels répertoriés ci-dessous:
• WebSharper (F #)
• Snap (Haskell)
• Ascenseur (Scala)
• Ocsigen (OCaml)
• Chicago Boss, Zotonic (erLang)
J'espère donc que ma réponse aidera n'importe qui.