2010-09-26 4 views
2

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

+5

Peut-être utiliser des mots-clés "SQL like"? –

+1

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

+0

Selon vous, que devrait-on appeler 'First'? 'voiture',' fst', ou 'head'? – Gabe

Répondre

1

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.

+0

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

+3

@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

5

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.

+0

Idem "où" etc –

+0

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

5

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?")

Questions connexes