Pourquoi le C# fonctionnelle programmming langue?
Il a été dit que C# peut être considéré comme un langage de programmation fonctionnel, même s'il est largement reconnu comme l'un OO langage de programmation.
Alors, quelle est la caractéristique fait en C#, un langage de programmation fonctionnel?
Je ne peux que penser:
- délégués (même sans les méthodes anonymes et les expressions lambda)
- fermetures
Autre chose?
Vous devez vous connecter pour publier un commentaire.
C# a emprunté un grand nombre de fonctionnalités de ML et Haskell par exemple:
C# 2.0 nous a apporté de polymorphisme paramétrique (ou "génériques"). J'ai entendu dire que Dom Syme, l'un des créateurs de F#, a été en grande partie responsable de la mise en œuvre des génériques dans le .NET BCL.
C# 2.0 permet aux programmeurs de passe et les retours des fonctions de valeurs pour les fonctions d'ordre supérieur, et a un support limité pour les délégués anonymes.
C# 3.0 et 3.5 prise en charge améliorée des fonctions anonymes pour vrai fermetures.
LINQ peut être considéré C#'s propre saveur des interprétations de la liste.
Anonyme types de ressembler à un rapprochement des ML dossiers
L'inférence de Type est une donnée.
Je ne sais pas pour vous, mais C# les méthodes d'extension regarder beaucoup comme Haskell les classes de type.
Il ya eu beaucoup de parler de la "dynamique" de mots clés de C# 4.0. Je ne suis pas sûr à 100% de sa mise en œuvre dans les détails, mais je suis assez sûr que sa va utiliser structurelles de frappe plutôt que de la liaison tardive à conserver C#'s le temps de compilation de sécurité. Structurelles de frappe est à peu près équivalent à "duck-typing pour les langages statiques", c'est une fonctionnalité que Haskell et ML les pirates ont pu profiter pendant des années.
Ce n'est pas de dire que le C# est un langage de programmation fonctionnel. Sa manque toujours des éléments importants tels que le filtrage, la queue-appel d'optimisation, et la liste et la n-uplet de littéraux. En outre, idiomatiques C# est fondamentalement impératif avec une forte dépendance à l'mutable état.
Je n'aurais pas nécessairement pris en compte certaines de ces caractéristiques mentionnées ci-dessus comme exclusive de langages de programmation fonctionnelle, mais son assez clair que le C# développeurs ont pris beaucoup d'inspiration à partir de langages de programmation fonctionnelle dans les dernières années.
dynamic
, en effet, utiliser la liaison tardive (et non structurels (sous-typage), c'est l'ensemble de point dedynamic
.Il n'existe pas de définition rigoureuse de "Langage OO", "Langage Fonctionnel", "Langue de la Procédure", on peut apporter des arguments que n'importe quelle langue s'adapte à presque n'importe quel classement; on peut écrire de procédure Java orienté objet C et fonctionnels de C++. Je l'utilise généralement une classification basée autour de ce que les principales caractéristiques sémantiques de soutien, ainsi que le développement commun de la pratique. Une bonne façon de voir les choses est d'examiner builtin populaire et de cadres, et de voir ce style qu'ils utilisent.
Les langages fonctionnels sont principalement définis comme des personnes ayant une fonction de classe primitives, avec des styles de développement qui utilisent ces pour réduire la complexité avec les expressions idiomatiques comme "la carte". Une autre caractéristique commune est la correspondance de modèle, mais je ne vois pas cela comme étant exclusivement fonctionnelle. "Pure" langages fonctionnels ont également pas d'effets secondaires, mais ce n'est pas obligatoire (voir comment floue de ces concepts? :).
Alors, qu'est-C#? Eh bien, il a d'abord fonction de classe de style primitives, avec des délégués (et a permis de mieux syntaxique de soutien pour le style avec les délégués anonymes et les lambdas). Est-il fonctionnel? Peut-être, si on écrit dans un style fonctionnel. Le Cadre de l'utilisation de ce style? Non, pas vraiment.
En tant que tel, je n'aurais pas de classe C# fonctionnelle dans la discussion générale -, il est, au mieux, multi-paradigme, avec une certaine saveur fonctionnelle.
Bien, les délégués et les fermetures permettent de fonctionner dans une grande partie fonctionnelle... par exemple:
etc
Vous pouvez écrire la plupart des fonctions d'ordre supérieur à l'aide de lambda /délégués. L'inférence de type n'est pas assez le même que pure langages fonctionnels tels que F#, mais C# générique-l'inférence de type est toujours très bon (surtout en C# 3.0).
Cela est particulièrement vrai dans .NET 3.5, C# 3.0, où LINQ prend une approche fonctionnelle à de nombreux problèmes. Mais vous pouvez toujours utiliser les aspects fonctionnels de C# avec .NET 2.0 et C# 2.0. Il est simplement plus facile avec C# 3.0 et les lambdas ;-p
En fait, le C# est un pragmatique langage de programmation. Il vise à rendre possible l'utilisation d'un certain nombre de paradigmes, sans vous punir affreusement, si vous voulez faire quelque chose de différent.
Pointeurs de fonction est une autre caractéristique que C# est dans la catégorie fonctionnelle.
Je ne pense pas que C# est très largement considéré comme un langage fonctionnel, cependant. Je pense qu'il est important de souligner que vous pouvez programmer dans un fonctionnel style dans de nombreuses langues qui ne sont pas purement fonctionnelle.
De Programmation Fonctionnelle:
À l'aide de cette définition, vous pouvez programmer dans un style fonctionnel dans presque n'importe quelle langue de la procédure. Purement fonctionnelle langues, juste pour la faire respecter.
Je plutôt d'accord avec les autres ici qui disent que C# est mieux décrit comme multi-paradigme que fonctionnelle. Mais je voudrais ajouter aux exemples de fonctions en C#, LINQ, un premier de la classe et relativement compréhensible système pour écrire des monades. Bien que purement fonctionnelle langues ne nécessitent pas l'utilisation de monades, l'exemple de Haskell a montré qu'ils peuvent être extrêmement utiles. Pourtant, ils sont l'une des choses les plus difficiles allez comprendre pour beaucoup de gens nouveaux à Haskell. En C#, d'autre part, beaucoup de gens écrire des requêtes LINQ ces jours sans même se rendre compte qu'ils sont en train d'écrire des monades.
vous pouvez trouver un grand tour d'horizon des fonctionnalités de langage dans la présentation de Andrew Kennedy (à partir de la Recherche sur la sp) appelé Le C# est un langage de programmation fonctionnel. Mon article sur programmation fonctionnelle en C# et F# donne une vue d'ensemble à partir d'un niveau plus élevé perspecitve (surtout vers la fin).
T.
C# a le fonctionnel, les fonctionnalités de langage, par exemple les fermetures. L' .NET les bibliothèques ne sont pas écrites dans un style fonctionnel, de sorte que, dans la pratique, C# n'est pas un langage fonctionnel. Presque tout est accompli avec de mutation. Les types de collection sont tous mutable.
Ce sont les principaux points whow fait c# fonctionnelle
1-les expressions Lambda
2-les méthodes d'Extension
3-Type inferende
4-les Objets et les collections initializators
5-Fermetures
6-les types Anonymes
7-Linq