Question

Quelles langues sont disponibles pour promouvoir à la fois la programmation orientée objet et la programmation fonctionnelle? Je sais que tout langage prenant en charge des fonctions de première classe peut être considéré comme fonctionnel, mais je recherche une syntaxe spécifiquement destinée aux deux styles de codage.

En utilisant un tel langage, j’imagine isoler tous les changements d’état en une seule partie de code et laisser le reste du programme être purement fonctionnel. Rien que d'y penser me fait baver (le paradis du débogage!).

Jusqu'à présent, j'ai découvert Scala bien que je n'en sois que juste entendu parler (et ça a l'air génial). Existe-t-il de gros prétendants dans ce style "mixte"? paradigme?

Était-ce utile?

La solution

Les plus connus sont OCaml et F # (ce qui peut être décrit vaguement comme OCaml pour .NET).

Il existe de nombreux autres langages multi-paradigmes, tels que Oz , mais ils ont valeur principalement pédagogique. En revanche, OCaml est très pratique. C'est presque aussi rapide que C et presque aussi belle que Haskell:)

Les langages de script populaires tels que Python et Ruby vous permettent également de programmer dans un style fonctionnel. Cependant, ils ne fournissent pas l’un des équipements les plus puissants qui soient "classique". les langages fonctionnels (ainsi que OCaml) ont: correspondance de modèle (ne le confondez pas avec l'expression régulière) .

Autres conseils

Javascript: OO et fonctionnel .

En outre, de nombreux langages de script tels que Python, Ruby, Lua, etc. ont cette capacité, mais manquent de nombreuses fonctionnalités intéressantes des langages fonctionnels tels que les types de données algébriques et la correspondance de modèles.

OCaml et F # sont les langages les plus populaires associant POO et FP, à ma connaissance.

La plupart des langages, comme Ruby, intègrent une programmation fonctionnelle, mais beaucoup de gens ne le réalisent même pas. Je trouve que de telles langues laissent beaucoup à désirer sur le plan de la syntaxe et autres.

Haskell : purement fonctionnel, à peu près nul, mais continuez, plongez. : D

Scala : Un beau mélange d'OG et de PF, qui pourrait surpasser Java en tant que langue principale de la machine virtuelle Java dans une décennie ou deux. Je l'aime bien, car il apporte une programmation fonctionnelle à la plate-forme java. cruellement besoin de mon humble avis.

C # : support impressionnant pour OO, ainsi que pour devenir plus fonctionnel (fonctions de première classe déjà, nous verrons les améliorations apportées par .net 4)

F # : langage .net Conçu spécifiquement pour être fonctionnel, à la différence de C #, conçu à l'origine pour les tâches OO.

Python : idéal pour OO, mais pas du tout adapté à la PF

Javascript : prend en charge des fonctions de première classe, mais pas spécialement conçu pour les FP comme Scala et F #. Encore un peu mieux que le python IMHO.

Pourquoi voulez-vous mélanger OO et FP? Comme un tremplin?

C #. C'est impératif, ce qui peut être pratique, mais comporte également de nombreuses fonctionnalités. Lambdas, les itérateurs et LINQ sont tous fonctionnels.

Cela ne plaira probablement pas beaucoup aux puristes, mais cela fonctionne pour moi.

JavaScript, Python et Ruby pourraient être utilisés de cette façon, mais Scala saute d'un cran en tapant statiquement la fonction et en travaillant sous JVM.

Vous posez vraiment la mauvaise question. Votre question est fondée sur la distinction entre " OO " et "fonctionnel" la programmation. Cette distinction n'est ni intéressante ni pertinente. En fait, selon le "prend en charge la fonction de première classe" critères, même Java est fonctionnel .

Mais vous avez frappé le clou avec "purement fonctionnel". C'est le bit intéressant. Quelles langues vous offrent une transparence et une pureté référentielles comme celles-là? Eh bien, la plupart d'entre eux, si vous faites très attention. Mais peu d'entre eux garantissent réellement que vos fonctions sont pures. Je ne peux penser qu'à quelques langues qui vous offrent cela.

L'un d'entre eux est Haskell . En Haskell, vous écrivez des programmes purement fonctionnels du début à la fin. Les effets secondaires sont délégués à une structure de données appelée IO, et l’état est géré en passant à travers des fonctions pures ou en l’encapsulant dans des monades. Donc, vous avez votre "ciel de débogage". où seule une petite partie de votre code interagit avec l'état global et où le reste de votre programme est pur, et la pureté est renforcée par le langage.

Tant que vous n'insistez pas pour "pureté", Common Lisp répond à tous vos besoins.

Je me demande pourquoi vous recherchez un langage qui encourage spécifiquement à le mélanger plutôt que de le faire de toute façon avec un langage qui fait de la programmation fonctionnelle et de la programmation OO? Il pourrait être facilement appliqué avec Python, Ruby, Perl ou des langages interprétés similaires. De plus, les langages OO basés sur le langage C ont tendance à mélanger du C pur à des fonctionnalités OO. Par exemple, l’objectif C pourrait facilement être écrit de cette manière si vous le souhaitez.

EDIT: On m'a fait savoir que je me trompais, j'ai laissé cette réponse ici au cas où quelqu'un pourrait apprendre de mon erreur - voir les commentaires.

Python, javascript, lis commun, ruby, smalltalk, haskell et ocaml, ça m'est arrivé. Ce n'est pas vraiment une combinaison exotique.

Ruby! En Ruby, tout est un objet (même les littéraux) et il dispose également d’un support complet pour la programmation fonctionnelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top