Un des dangers du params
mot-clé est que, après le codage des appels à la méthode,
- quelqu'un supprime accidentellement / intentionnellement un ou plusieurs paramètres requis de la signature de méthode, et
- un ou plusieurs paramètres requis immédiatement avant le
params
paramètre avant le changement de signature étaient compatibles avec le params
paramètre,
ces appels continueront à être compilés avec une ou plusieurs expressions précédemment destinées aux paramètres requis traités comme params
paramètre facultatif . Je suis juste tombé sur le pire des cas: le params
paramètre était de type object[]
.
Ceci est remarquable car les développeurs sont habitués à ce que le compilateur se tape les poignets avec le scénario beaucoup plus courant où les paramètres sont supprimés d'une méthode avec tous les paramètres requis (car le nombre de paramètres attendus changerait).
Pour moi, ça ne vaut pas le raccourci. (Type)[]
sans params
fonctionnera avec 0 à l'infini # de paramètres sans avoir besoin de remplacements. Le pire des cas est que vous devrez ajouter un , new (Type) [] {}
aux appels là où il ne s'applique pas.
Btw, à mon humble avis, la pratique la plus sûre (et la plus lisible) consiste à:
passer via les paramètres nommés (ce que nous pouvons maintenant faire même en C # ~ 2 décennies après avoir pu en VB; P) (parce que:
1.1. c'est le seul moyen qui garantit la prévention des valeurs involontaires transmises aux paramètres après l'ordre des paramètres, le type compatible et / ou le changement de nombre après le codage des appels,
1.2. il réduit ces chances après un changement de signification de paramètre, car le nouveau nom d'identifiant probable reflétant la nouvelle signification est juste à côté de la valeur qui lui est transmise,
1.3. cela évite d'avoir à compter les virgules et à sauter d'avant en arrière de l'appel à la signature pour voir quelle expression est passée pour quel paramètre, et
1.3.1. Soit dit en passant, cette raison à elle seule devrait être abondante (en termes d'éviter les violations fréquentes sujettes aux erreurs du principe DRY, juste pour lire le code sans parler de le modifier également ), mais cette raison peut être exponentiellement plus importante s'il y en a un / plus d'expressions transmises contenant elles-mêmes des virgules, c'est-à-dire des références de tableau multidimensionnel ou des appels de fonction multi-paramètres. Dans ce cas, vous ne pourriez même pas utiliser (ce qui, même si vous le pouviez, ajouterait toujours une étape supplémentaire par paramètre par appel de méthode) une fonction Rechercher toutes les occurrences dans une sélection dans votre éditeur pour automatiser le comptage des virgules pour vous.
1.4. si vous devez utiliser des paramètres facultatifs ( params
ou non), cela vous permet de rechercher des appels où un paramètre facultatif particulier est passé (et donc, très probablement n'est pas ou au moins a la possibilité de ne pas être la valeur par défaut),
(REMARQUE: les raisons 1.2 et 1.3 peuvent faciliter et réduire les risques d'erreur même lors du codage des appels initiaux, sans mentionner quand les appels doivent être lus et / ou modifiés.))
et
faites-le UN - PARAMÈTRE - PAR - LIGNE pour une meilleure lisibilité (car:
2.1. c'est moins encombré, et
2.2. cela évite d'avoir à faire défiler vers la droite et l'arrière vers la gauche (et de le faire PAR LIGNE, car la plupart des mortels ne peuvent pas lire la partie gauche de plusieurs lignes, faire défiler vers la droite et lire la partie droite)).
2.3. il est conforme à la "meilleure pratique" que nous avons déjà développée pour les déclarations d'affectation, car chaque paramètre transmis est essentiellement une déclaration d'affectation (attribution d'une valeur ou d'une référence à une variable locale). Tout comme ceux qui suivent la dernière «meilleure pratique» dans le style de codage ne rêveraient pas de coder plusieurs déclarations d'affectation par ligne, nous ne devrions probablement pas (et une fois que la «meilleure pratique» ne rattrapera pas mon «génie»; P ) le faire lors du passage des paramètres.
REMARQUES :
Passer des variables dont les noms reflètent les paramètres n'aide pas lorsque:
1.1. vous passez des constantes littérales (c.-à-d. un simple 0/1, faux / vrai ou nul pour lequel même les «meilleures pratiques» peuvent ne pas exiger que vous utilisiez une constante nommée et leur fonction ne peut pas être facilement déduite du nom de la méthode ),
1.2. la Méthode est de niveau nettement inférieur / plus générique que l'Appelant de telle sorte que vous ne voudriez pas / ne pourriez pas nommer vos Variables de la même / similaire aux Paramètres (ou vice versa), ou
1.3. vous êtes la réordonnancement / remplacement des paramètres dans la signature qui peut donner lieu à des appels antérieurs encore parce que les Compiler types se trouvent être encore compatibles.
Avoir une fonction d'enveloppement automatique comme VS n'élimine qu'UNE (# 2.2) des 8 raisons que j'ai données ci-dessus. Avant aussi tard que VS 2015, il n'avait PAS d'indentation automatique (!?! Vraiment, MS?!?), Ce qui augmente la gravité de la raison n ° 2.1.
VS devrait avoir une option qui génère des extraits d'appel de méthode avec des paramètres nommés (un par ligne bien sûr; P) et une option de compilateur qui nécessite des paramètres nommés (similaire dans son concept à Option Explicit dans VB qui, au fait, l'exigence de était prolly une fois pensée tout aussi scandaleux, mais est désormais exigé par les «meilleures pratiques»). En fait, "de retour dans monjour ";), en 1991, quelques mois seulement après ma carrière, avant même d'utiliser (ou même d'avoir vu) un langage avec des paramètres nommés, j'avais l'anti-mouton /" juste parce que vous pouvez, ne veut pas dire que vous devriez " / ne pas aveuglément "couper les extrémités du rôti" sens suffisant pour le simuler (en utilisant des commentaires en ligne) sans avoir vu personne le faire. Ne pas avoir à utiliser les paramètres nommés (ainsi que toute autre syntaxe qui sauve "" précieux "" code source) est une relique de l'ère de la carte perforée lorsque la plupart de ces syntaxes ont commencé. Il n'y a aucune excuse pour cela avec du matériel moderne et des IDE et des logiciels beaucoup plus complexes où la lisibilité est beaucoup, BEAUCOUP , BEAUCOUPplus important. "Le code est lu beaucoup plus souvent qu'il n'est écrit". Tant que vous ne dupliquez pas le code non mis à jour automatiquement, chaque frappe enregistrée est susceptible de coûter plus cher lorsque quelqu'un (même vous-même) essaie de le lire plus tard.