2016-02-06 2 views
1

En java et C# nous avons des interfaces, quel est l'équivalent dans un langage comme haskell ou quel est le concept appelé en programmation fonctionnelle?Interfaces en programmation fonctionnelle

+3

Dans le cas où vous essayez d'apprendre Haskell (ou toute autre langue) en mappant des fonctionnalités à partir de langues déjà connues, je vous recommande fortement de ne pas le faire. N'essayez jamais de programmer en X en pensant en Y, ce qui vous assurera que vous trouverez X manquant de beaucoup de choses Y, tout en manquant toutes les fonctionnalités que X a et Y n'a pas, conduisant à un code très non-idiomatique dans X – chi

+0

@chi j'ai demandé parce que haskell a des génériques, s'il a des génériques alors il doit y avoir quelque chose de similaire aux interfaces. – Bread

+0

@chi a raison de vous avertir, cependant. Si vous vous attendez à ce que les classes de type Haskell se comportent comme des interfaces Java, simplement parce qu'elles fournissent l'abstraction polymorphe, vous serez très confus. Haskell n'est aucunement orienté objet. – comingstorm

Répondre

7

Il ya des choses comme typeclasses, comme disent les autres réponses, mais plus encore, il y a une interface omniprésente: une fonction. Beaucoup, beaucoup d'endroits où un programme orienté objet aurait besoin d'une interface personnalisée, un programme fonctionnel similaire peut simplement utiliser une fonction. par exemple, map f xs dans haskell utilise f, où un programme orienté objet peut utiliser un Visitor ou autre pour accomplir la même tâche.

+1

Une certaine mention du "problème d'expression" peut être dans l'ordre. – dfeuer

+1

Cette réponse a besoin de plus d'emphase. Les choses que vous résolvez avec une interface en Java sont généralement mieux résolues avec des fonctions en haskell. Les classes de types sont quelque chose de très différent, et essayer de les utiliser comme des interfaces vous mènera à la douleur. – Carl

6

Haskell typeclasses remplissent certains des mêmes rôles que les interfaces dans les langages orientés objet.

0

données et newtype en Haskell sont à peu près égale à classe en Java.

La classe dans Haskell est approximativement égale à l'interface dans Java.