32 votes

La programmation fonctionnelle impose-t-elle de nouvelles conventions de dénomination?

J'ai récemment commencé à étudier la programmation fonctionnelle à l'aide de Haskell et est tombé sur cet article sur le site officiel Haskell wiki: Comment lire Haskell.

L'article affirme que le court, les noms de variables telles que l' x, xs, et f sont raccord pour code Haskell, en raison de la concision et de l'abstraction. En substance, il affirme que la programmation fonctionnelle est un distinct paradigme que les conventions de nommage des autres paradigmes ne s'appliquent pas.

Quelles sont vos pensées sur cette question?

31voto

Ionuț G. Stan Points 62482

Dans un paradigme de la programmation fonctionnelle, les gens sont généralement construire des abstractions non seulement de haut en bas, mais aussi de bas en haut. Cela signifie que vous fondamentalement améliorer la langue d'accueil. Dans ce genre de situations, je vois laconique de nommer, comme approprié. Le langage Haskell est déjà laconique et expressif, donc vous devez être un peu habitué.

Cependant, en essayant de modéliser un certain domaine, je ne crois pas succincte noms sont bons, même lorsque le corps de fonction sont de petite taille. La connaissance du domaine devrait refléter dans l'appellation.

Juste mon avis.

En réponse à votre commentaire

Je vais prendre deux fragments de code de Real World Haskell, à la fois à partir du chapitre 3.

Dans la section nommée "plus contrôlée approche", les auteurs présentent une fonction qui renvoie le deuxième élément d'une liste. La version finale est ceci:

tidySecond :: [a] -> Maybe a
tidySecond (_:x:_) = Just x
tidySecond _       = Nothing

La fonction est suffisamment générique, en raison du type de paramètre a et le fait que nous agissons sur un bâti de type, de sorte que nous n'avons pas vraiment attention à ce que le deuxième élément est en réalité. Je crois x est suffisant dans ce cas. Tout comme dans un peu d'équation mathématique.

D'autre part, dans la section intitulée "Introduction de variables locales", ils sont en train d'écrire un exemple de fonction qui tente de modéliser un petit morceau de le domaine bancaire:

lend amount balance = let reserve    = 100
                          newBalance = balance - amount
                      in if balance < reserve
                         then Nothing
                         else Just newBalance

À l'aide de courts nom de variable n'est certainement pas recommandé. Nous faisons attention à ce que ces montants représentent.

16voto

ดาว Points 7105

Je pense que si la sémantique des arguments sont clairs dans le contexte de la base de code que vous pouvez sortir avec court de noms de variables. J'ai souvent de les utiliser en C# lambdas pour la même raison. Toutefois, si elle est ambiguë, vous devriez être plus explicite avec de nommage.

map                     :: (a->b) -> [a] -> [b]
map f  []               =  []
map f (x:xs)            =  f x : map f xs

Pour quelqu'un qui n'a pas eu d'exposition à Haskell, qui peut sembler moche, difficile à maintenir le code. Mais la plupart des Haskell programmeurs vont comprendre tout de suite. Donc, il fait le travail.

var list = new int[] { 1, 2, 3, 4, 5 };
int countEven = list.Count(n => n % 2 == 0)

Dans ce cas, à court nom de la variable semble le plus approprié.

list.Aggregate(0, (total, value) => total += value);

Mais dans ce cas, il semble plus approprié de nommer les variables, car elle n'est pas immédiatement apparent que l'Agrégat est en train de faire.

Fondamentalement, je ne crois pas trop s'inquiéter de la convention, sauf si c'est absolument nécessaire pour empêcher les gens de vissage. Si vous avez des choix en la matière, utiliser ce qui fait sens dans le contexte (langue, une équipe, un bloc de code) que vous travaillez, et sera compréhensible par quelqu'un d'autre lecture des heures, des semaines ou des années plus tard. Tout le reste n'est que perte de temps le trouble obsessionnel-compulsif.

8voto

Je pense que la portée est la raison n ° 1 pour cet. Dans les langages impératifs, des variables dynamiques, en particulier celles du monde entier doivent être nommés correctement, car ils sont utilisés dans plusieurs fonctions. Avec une portée lexicale, il est clair que le symbole est lié à au moment de la compilation.

L'immutabilité y contribue aussi, dans une certaine mesure - dans les langages traditionnels comme le C/ C++/ Java, une variable peut représenter des données différentes à différents points dans le temps. Par conséquent, il doit être donné un nom à donner au programmeur une idée de son fonctionnement.

Personnellement, j'ai l'impression que les fonctionnalités fonctionnalités comme la première classe des fonctions les noms de symboles assez redondante. Dans les langues traditionnelles, il est plus facile de l'associer à un symbole, sur la base de son utilisation, nous pouvons dire si c'est des données ou une fonction.

6voto

Rorick Points 3582

Je suis étudiant en Haskell maintenant, mais je ne pense pas que ses conventions de nommage est donc très différent. Bien sûr, en Java, vous êtes à peine à trouver des noms comme xs. Mais il est facile de trouver des noms comme x dans certaines fonctions mathématiques, i, j pour les comptoirs, etc. Je considère que de tels noms pour être tout à fait approprié dans le bon contexte. xs en Haskell est approprié uniquement des fonctions génériques sur les listes. Il y en a beaucoup en Haskell, de sorte que ce nom est très répandu. Java ne fournit pas de moyen facile de gérer un tel générique des abstractions, c'est pourquoi les noms pour les listes et les listes elles-mêmes) sont généralement beaucoup plus spécifiques, par exemple, lists ou users.

3voto

Brian Rasmussen Points 68853

J'ai juste assisté à un certain nombre de discussions sur le Haskell avec beaucoup d'exemples de code. En tant que longs que le code traite de x, i et f la dénomination ne me dérange pas. Cependant, dès que nous sommes entrés dans heavy duty liste, la manipulation et la comme j'ai trouvé les trois lettres ou des noms à être beaucoup moins lisible que je préfère.

Pour être juste une partie importante de la dénomination suivie d'un ensemble de conventions, donc je suppose qu'une fois que vous obtenez dans le jargon, ce sera un peu plus facile.

Heureusement, rien n'empêche d'utiliser des noms significatifs, mais je ne suis pas d'accord que la langue elle-même fait en quelque sorte les trois lettre identificateurs de sens pour la majorité des gens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X