Quelle était la raison d'être du changement de nom des opérations de liste d'ordre supérieur en C#? (Exemples: map
->Select
, filter
->Where
, fold
->Aggregate
)Justification du changement de nom des opérations de liste d'ordre supérieur
Répondre
Eh bien, l'OMI, "fold" est un nom assez terrible pour "agrégat". Freaking les maths. :) Surtout que les noms C# sont plus en ligne avec SQL/LINQ.
Les noms C# sont plus en ligne avec _English_, sans parler de SQL/LINQ. Mais que Dieu nous garde de démystifier notre profession en employant des mots que les gens ordinaires comprennent ... – Lunivore
@Lunivore: Je ne sais pas. Sans la connexion à SQL, je ne pense pas que le nom 'Select' me donnerait une idée de ce que fait la méthode - je supposerais probablement que c'est' filter', pas 'map'. 'Where' est un peu plus intuitif en tant que nom de méthode, mais d'habitude je dirais que les noms de méthodes devraient être des verbes (et' filter' est parfaitement descriptif à mon avis). Aucun argument à propos de l'agrégat vs plier si (mais j'aurais pu aller avec Accumuler si cela ne tenait qu'à moi). – sepp2k
LINQ essaie d'être à peu près familier aux personnes connaissant SQL, où la projection est select, etc. Vous pouvez écrire vos propres méthodes d'extension avec des noms bien sûr.
Idem "où" etc –
Considérant que l'écrasante majorité des utilisateurs de LINQ seront familiers avec SQL et ne connaissent pas les opérateurs de programmation fonctionnelle traditionnels, cela est parfaitement logique. – Gabe
Pas une réponse, mais un digne côté:
Voir http://blogs.msdn.com/b/jaredpar/archive/2008/12/02/mapping-linq-to-f.aspx pour une traduction « anneau décodeur » entre LINQ (comme en C#/Enumerable
) et F # Seq
fonctions (qui suivent la plupart du temps les noms fonctionnels plus traditionnels).
En ce qui concerne la méta-question ...
La communauté de programmation fonctionnelle et la communauté de programmation grand public impératif ont évolué dans presque isolement les uns des autres depuis longtemps. En conséquence, il existe des différences de vocabulaire fondamentales; par exemple, un terme commun tel que "polymorphisme" signifie des choses complètement différentes pour chaque groupe (polymorphe paramétrique, a.k.a. "génériques" ou "modèles" pour les FP-ers, versus polymorphisme de sous-type pour le reste). Demander la raison derrière les noms (s'il y en a même un) donne souvent une réponse simple - vous nommez des choses selon la «culture locale». En C#, LINQ est un langage de requête comme SQL, donc il ressemble beaucoup à SQL. Mais poser cette question est à peu près analogue à aller en Espagne et demander quelle est la raison pour laquelle tout le monde appelle sa maison "mi casa". ("Qu'est-ce que vous voulez dire, pourquoi est-ce que je l'appelle comme ça? Vous l'appelez quelque chose de différent?")
Peut-être utiliser des mots-clés "SQL like"? –
Et clairement 'bind' est le nom propre de la méthode' SelectMany', n'est-ce pas? Ou peut-être 'splat' ou' aplatir 'ou 'concat' ou' map_concat' ... – Gabe
Selon vous, que devrait-on appeler 'First'? 'voiture',' fst', ou 'head'? – Gabe