Question

J'ai ces deux morceaux de code, lequel est le plus lisible?

  1. foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. linq

    return risks.Sum(risk => risk.TechnicalPremium);
    
Était-ce utile?

La solution

Si l'équipe qui travaille sur le code sait ce que fait la version de Linq et connaît son fonctionnement interne, alors elle est plus lisible.

Autres conseils

Utilisez ce que vous préférez mais cachez-le dans une méthode:

return risks.SumTechnicalPremium();

Ni l'un ni l'autre. Le premier est plus détaillé et susceptible d’être compris par tout le monde. Le second est plus concis et facile à comprendre pour tout le monde, même avec une connaissance passagère de linq.

Je dirais que vous pouvez baser votre choix sur l'environnement dans lequel vous vous trouvez.

Pour quelqu'un qui sait lire LINQ, celui de LINQ.

Pour quelqu'un qui doit interpréter le code étape par étape (en utilisant intellisense / documentation, la plus courte.

Allez avec linq. Si vous pensez que cela nécessite une explication, un commentaire d’une ligne s’occupera de cela. Au fur et à mesure que les gens s'habitueront à linq, le besoin de commentaires disparaîtra.

Le code LINQ est à la fois très lisible et auto-documenté.

La première option est plus lisible par un plus grand nombre de personnes. La seconde option présente un «obstacle à l'entrée» en ce sens que le lecteur peut ou pourrait connaître et comprendre LINQ. Il est plus concis et pourrait donc être préférable si votre public est au-dessus de cette barrière.

Je pense que la deuxième option est préférable car elle devrait être plus efficace. Cependant, ce qui se passe (du moins pour moi) est moins évident.

Je dirais le premier depuis que je ne connais pas linq. Au risque de trop documenter, j'utiliserais celui-ci avec une brève description de ce qui se passe. Ou simplement dire que c'est linq pour les personnes qui n'en ont peut-être aucune idée.

Si vous fournissez un commentaire expliquant son objectif, alors je choisirais l'option Linq.

Le premier si vous ne connaissez pas Linq. Tout développeur peut lire et comprendre le premier.

Il n'y a pas de problème de lisibilité ici. Cliquez sur Somme et appuyez sur F1.

Linq pour la victoire.

Chaque langue a des conventions sur le meilleur moyen de coder ce genre de choses. Ce qui est le plus lisible pour les personnes qui l'utilisent régulièrement n'est pas universel. Pour un programmeur Java ou C # normal, la première option est plus lisible. Pour quelqu'un habitué à LINQ ou à la programmation fonctionnelle, le second est plus lisible.

Je ne sais pas c # mais la deuxième alternative me semble beaucoup plus propre et je peux comprendre ce qu’elle fait (d’accord. Avec quelques devinettes et des recoupements avec la première version). Probablement à cause de certains antécédents fonctionnels. Mais dans le premier cas, vous devez rechercher technique Premium dans 4 (!) Endroits. Le second est beaucoup plus court et plus facile à comprendre si vous ne lisez que le code.

ou

decimal technicalPremium = 0;

foreach (risque de risque dans les risques) techniquePremium = techniquePremium + risque.TechniquePremium;

return technicalPremium;

Je vois des gens dire qu’ils aiment le premier "si vous ne connaissez pas Linq". Oui, et le premier est illisible si vous ne connaissez pas C #. Ce n’est pas une question de "ce qui est plus lisible", mais "quelles fonctionnalités de langage sommes-nous à l’aise d’utiliser?"

Commencez par discuter avec votre équipe des parties du langage / framework / outils que tout le monde déteste, puis déclarez-les comme illimitées. Tout le reste est considéré comme faisant partie du vocabulaire standard, et tout le monde doit s'exprimer couramment. Cette liste doit figurer dans votre document sur les normes de codage, juste à côté de " ne créez jamais de types de valeur mutable " et " ne vous embêtez pas avec les propriétés triviales pour les non-publics membres ".

Tant que Linq ne figure pas sur votre " exclure " liste, le deuxième exemple est far plus lisible que le premier. Pourquoi? Parce qu’il déclare l’intention du code, au lieu de simplement présenter le mécanisme à déchiffrer par le lecteur.

Si votre objectif est de le rendre plus lisible par "tout le monde". cela pourrait venir après vous, puis utilisez le foreach. J'interprète "plus lisible" signifier toute personne ayant une expérience des bases de la langue devrait pouvoir comprendre. Pour ceux qui ne sont pas familiers avec linq et qui utilisent encore VS2005 ou une version antérieure, la syntaxe de linq serait déroutante.

Je dirais que le premier morceau de code est nettement plus lisible, et le serait encore plus si vous renommiez au moins la variable risque afin qu’elle ait un nom différent de celui de la classe. Ce serait probablement mieux aussi si vous renommiez le tableau des risques.

Je suis d’accord avec ceux qui disent que le second sera facile à comprendre à mesure que Linq sera adopté plus largement. C'est certainement plus succinct.

Cependant, je suis un peu préoccupé par la facilité de débogage. Il semble beaucoup plus facile de parcourir le code dans foreach pour voir exactement ce qu'il fait à chaque passage.

Je pense que cela dépend de ce que vous entendez par "lisible". Le premier exemple indique clairement la logique du programme et doit être compréhensible pour quiconque possède une expérience en programmation.

Pour moi, le deuxième exemple est plus intuitif en fonction du contexte (c'est-à-dire que vous prenez un tableau (ou un autre type de collection) et exécutez une méthode nommée Sum sur chaque élément de ce tableau). Le seul endroit où le deuxième exemple peut devenir moins clair est l’expression lambda elle-même, en particulier pour les personnes qui n’ont pas eu d’expérience avec lambdas ou Alraedy et qui ont une formation en programmation fonctionnelle.

Je pense que plus les lambdas seront répandus dans la programmation .NET, plus cela posera de problème. En l'état actuel des choses, je pense qu'il y a une très petite courbe d'apprentissage pour comprendre les bases de l'utilisation des expressions lambda dans .NET.

Le second, définitivement. Avoir un aussi gros bloc de code pour faire quelque chose d'aussi simple que sommer est simplement inutile. Je ne sais pas non plus ce qu'est LINQ, mais cela m'est parfaitement lisible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top