Changer ma façon de penser en préparation de la programmation fonctionnelle

9

Lors du passage à un style de programmation fonctionnel après être venu de la procédure et de la POO, que dois-je savoir à l'avance sur "cette nouvelle façon de penser"?

Comment vous préparez-vous pour la plongée dans le monde de la PF et obtenez-vous la première fois?

Quelles sont les bases pour apprendre et régler les choses en premier?

JohnDoDo
la source
2
C'est trop général, à mon humble avis. Commencez à lire! La plupart des livres et manuels sur la programmation fonctionnelle commencent aujourd'hui par les réponses à votre question.
devmiles.com
Essayez-le, puis posez une question si vous êtes bloqué sur quelque chose
Tom Squires
@ Vladimir Volodin: Ce serait bien mais ce n'est pas obligatoire pour chaque livre. Pouvez-vous en recommander de bonnes (de préférence indépendantes de la langue)?
JohnDoDo
Vous n'avez pas à plonger . Vous pouvez essayer l'expression lambda dans un langage OOP comme c # pour faciliter la transition de OOP à FP.
TomCaps
4
Je pense que vous l'avez à l'envers. Essayez la programmation fonctionnelle et votre façon de penser changera.
kevin cline

Réponses:

6

Vous allez avoir besoin d'une pensée déclarative au lieu de la méthode procédurale "d'abord faire ceci, puis faire ceci, puis faire ceci ..." pour résoudre les problèmes. La compréhension de la récursivité pourrait être un bon point de départ, car il s'agit d'une sorte de compromis entre la pensée procédurale et déclarative.

Joonas Pulakka
la source
4

Vous avez mis le chariot devant le cheval. Vous n'avez pas besoin de vous préparer. Choisissez simplement une langue qui vous semble intéressante, trouvez de la documentation et essayez-la. Si vous êtes coincé, arrêtez-vous et recherchez une réponse. À mesure que vous progressez, votre façon de penser changera.

kevin cline
la source
3

FP est basé sur le calcul lamdba. Vous devez le savoir. C'est un bon point de départ. Les fonctions sont tout. Il n'y a pas de concept d'État (bien que vous puissiez le simuler à un niveau supérieur).

En POO,

a = 1 a = a + 1

est accepté. Ce n'est pas le cas dans FP. Vous ne pouvez tout simplement pas attribuer à la variable une autre valeur. Si vous voulez apprendre la PF à long terme, apprenez Haskell. C'est la version la plus pure de FP sur le marché et c'est assez compliqué aussi (je viens de commencer à l'apprendre) mais ça vaut quand même le coup de l'apprendre.

Une introduction à la programmation fonctionnelle vous donne un aperçu de haut niveau de ce qu'est la FP.

Deux mises en garde cependant

  1. Si vous voulez apprendre la PF pour des emplois, il n'y a pas trop de postes vacants. La procédure et la POO régissent toujours le marché du travail. Mais FP peut vous aider beaucoup à explorer de nouvelles façons de résoudre un problème.
  2. Les compilateurs FP ne sont pas incroyablement rapides. Puisque FP est plus soucieux de résoudre le problème, vous ne pouvez pas vous attendre à une vitesse C. Mais vous pouvez toujours envoyer des instructions au compilateur (dans Haskell) pour accélérer le processus d'exécution. Le compromis est que vous passez beaucoup de temps à vous concentrer sur le programme en cours plutôt que sur les bugs de lutte contre les incendies.
Ubermensch
la source
8
"FP est basé sur le calcul lamdba. Vous devez le savoir." Non, non. Connaître le calcul lambda n'est pas nécessaire pour comprendre la programmation fonctionnelle plus que de connaître les machines de Turing (ou l'assemblage) est nécessaire pour comprendre la programmation impérative.
sepp2k
@ sepp2k Pour devenir bon en PF avec un objectif à long terme, je crois honnêtement que l'apprentissage du calcul lambda est nécessaire. Vous pouvez l'apprendre sans lambda calcul mais l'apprendre vous rendrait meilleur à la PF.
Ubermensch
2
Certes, FP a déclaré que cet état est généralement immuable, et je ne suis pas sûr non plus d'être d'accord avec l'affirmation selon laquelle les compilateurs sont lents
jk.
@jk. Certes, ils ont un état mais pas de la manière OO (les états peuvent être inclus dans des fonctions ou en tant que modèles de correspondance et de manière plus subtile). Et un état immuable signifie que vous n'avez qu'un seul état. C'est pourquoi une fonction doit toujours retourner la même valeur. En ce qui concerne les compilateurs, je ne pense pas qu'ils puissent correspondre à C / C ++ en termes de vitesse pure car le compilateur prend en charge les étapes nécessaires au calcul du résultat au lieu de nous spécifier l'ordre. FP a son plus grand avantage en termes de coûts de développement réduits et d'informatique parallèle plutôt que de vitesse de processeur pure.
Ubermensch
3

Je fais de mon mieux pour me souvenir du mantra suivant:

Entrée de données -> Transformation de données -> Sortie de données

ou

TransformData (Data In) -> Data Out

Nuit noire
la source
1
Ce devrait être TransformData (DataIn) -> DataOut
Ubermensch
:) en tant que matra "Data In, Transform Data, Data Out" est plus facile à dire "TransformData, Open Bracket, Data In, Close Bracket, Data Out" Je plaisante, je suis d'accord avec vous.
Darknight
C'est juste un ami sympathique. Merci pour la réponse.
Ubermensch
Je sais, je plaisantais juste avec toi, sans m'offenser, en fait je pense que je vais mettre à jour ma matra.
Darknight
Man votre ensemble de compétences est assez grand.
Ubermensch