7
votes

Comment la programmation fonctionnelle influence-t-elle votre style de codage?

La plupart des programmeurs utilisent aujourd'hui Oops Concepts pour le développement de logiciels.

Mais certains d'entre eux sont également exposés à la programmation fonctionnelle.

Comment la programmation fonctionnelle influence-t-elle votre style de codage?


5 commentaires

Comment n'est-ce pas une vraie question? Ceci est une question parfaitement valide. L'OP veut savoir comment la programmation fonctionnelle change de style de codage, de la même manière que les changements de code de codage de l'OOP lorsqu'il est appliqué.


C'est une excellente question. Voter pour rouvrir.


C'est très subjectif mais je ne pense pas que cela mérite d'être fermé.


Je dirais que la programmation fonctionnelle n'influence pas simplement votre style de codage, mais change la façon dont vous pensez à la programmation.


Cette question a-t-elle vraiment une "réponse"?


10 Réponses :


5
votes

Je trouve qu'il est beaucoup plus facile d'écrire du code multi-fileté maintenant.

J'ai tendance à avoir moins de variables de niveau de classe qu'auparavant.

J'ai aussi tendance à avoir des interfaces fonctionnellement indépendantes ... à nouveau qui a un gain énorme en ce qui concerne la multi-filetage, car il peut réduire considérablement la quantité de verrouillage d'objet requise à condition que vos fils soient également fonctionnellement indépendants.

J'ai aussi tendance à avoir des cauchemars sur les bretelles de fermeture me chassant.


0 commentaires

4
votes

Deux choses se viennent à l'esprit provenant d'une programmation fonctionnelle que j'adopte:

  • Modification des méthodes de vide qui modifient des variables de classe aux méthodes qui renvoient des valeurs
  • Faites des cours immuables au lieu d'avoir des cours avec des setters (JavaBeans antipattern)

2 commentaires

+1, ces deux ces deux réduisent le couplage dans votre système.


presque mot pour le mot ce que je pense



3
votes

Après avoir écrit une morceinte décente de Haskell signifie que c'est beaucoup plus facile pour moi d'utiliser LINQ vers SQL dans mon code C #.

Je me penche maintenant fortement vers l'écriture de code qui prend un résultat et renvoie un résultat plutôt que de modifier une variable comme effet secondaire.

J'ai écrit de gros morceaux de code procédural et fonctionnel, qui me facilite la facilitation de mon code dans des morceaux plus petits qui sont plus un style ou l'autre. Quand je ne connaissais que la programmation de procédure / OOP, j'avais moins d'outils dans ma boîte à outils mental.

Lecture de sources de bibliothèque à Haskell nous a appris à mieux faire bouillir mon code pour séparer les abstractions de la tâche réelle.

J'ai beaucoup gagné d'écrire Haskell!


0 commentaires

1
votes

Les gestionnaires d'événements qui sont des fermetures; xxx


2 commentaires

C'est en fait assez impératif.


Dépend de ce que vous entendez par «fonctionnel». Dans ce cas, je faisais référence à Lambdas, à la création automatique de la fermeture et aux objets de fonction de première classe.



6
votes

Utilisation principale a passé des fonctions dans des fonctions d'ordre supérieur, telles que le filtre et la carte (où et sélectionnez-la) C'est vraiment le plus grand impact, ce qui vous permet d'écrire des choses comme des opérations définies une fois, alors des choses qui agissent sur ou modifier les ensembles.

des choses comme xxx

au lieu de xxx


0 commentaires

1
votes

Je trouve que le mouvement de Python 3.x sur les itérateurs est très naturel pour moi, car cela me rappelle l'évaluation paresseuse de Haskell.

Vraiment, qu'il s'agisse d'utilisation de Python 2.x ou Python 3.x, compréhensions de liste , mappe , iTerTools , Opérateur et (un légèrement inférieur) FuncTools , mes amis!


0 commentaires

2
votes

À certains égards, je l'ai trouvé frappant à quel point j'avais été inconsciemment en utilisant de la programmation de style fonctionnel, sans le reconnaître pour ce que c'était.

Par exemple, dans Java, je fais une forte utilisation de constructions dans des collections des communes telles que le transformateur et le prédicat, qui sont essentiellement des fermetures, mais implémentées comme interfaces Java. Vous utilisez ensuite les fonctions utilitaires fournies pour transformer et filtrer les éléments d'une collection. Cela va à l'encontre de la manière "standard" impérative de faire ce genre de chose en Java.

Celles-ci, bien sûr, sont la carte fonctionnelle de la vanille et les opérations de filtrage, mais je les utilisais instinctivement sans réaliser ce que c'était. Cela me suggère que le style fonctionnel est à une large intuitive, même si vous n'êtes pas raconté à ce sujet.


1 commentaires

En effet, la programmation fonctionnelle permet un niveau d'abstraction plus élevé et on dirait que vous l'avez atteint.



1
votes

Étant donné que la programmation fonctionnelle est orthogonale à OOP, elle a vraiment ouvert mes yeux sur la façon dont je structure mes cours.

  • J'ai tendance à avoir des interfaces plus significatives qui ressemblent à des concepts.
  • Mon code est mieux découplé et j'ai des classes plus petites de manière plus petite. Il est rare que je crée une classe juste pour mettre en œuvre un modèle.
  • Je crée moins de setters à la place, j'appelle différentes fonctions de membre qui calculent la valeur que je souhaite et transmettez-la à un seul pointet.
  • Avant la programmation fonctionnelle, je ne penserais jamais à transmettre une fonction en tant que paramètre en tant que solution tout en essayant de résoudre un problème. Maintenant, cette solution apparaît simplement dans ma tête et aide vraiment avec sec.
  • Mon code contient plus d'expressions au lieu de la déclaration.
  • Si une solution le permet, je vous penche vers une évaluation paresseuse.

0 commentaires

0
votes

La programmation fonctionnelle et OO ne sont pas des concepts disjoints. Une lacune dans les langues fonctionnelles que je vois est leur manque d'expressivité ADT. La chose la plus proche que j'ai vue à une programmation fonctionnelle dans une langue oo est Eiffel. Par les fonctions sont transparentes de manière transparente, ce serait idéal si cela était appliqué.


0 commentaires