2010-07-26 4 views
2

Le code ci-dessous m'a semblé correct quand je l'ai écrit, mais quand je suis revenu dessus, il était assez difficile de comprendre ce qui se passait. Il y avait des parenthèses autour de value == ..., mais j'ai dû les enlever après que StyleCop soit devenu obligatoire (je ne peux pas vraiment contrôler cela). Alors, comment puis-je améliorer cette section de code? Je pensais: x = value == y ? true : false;, mais c'est probablement encore plus déroutant, plus stupide, bien que le compilateur optimisera cela.Améliorer la lisibilité d'un extrait court tout en gardant StyleCop heureux

set 
{ 
    Debug.Assert(value == ConfigType.DATABASE || value == ConfigType.FILE, 
     "Configuration type must be either 'File-based' or 'Database-based'; it was: " 
     + value.ToString()); 

    // HG TODO: The following is concise but confusing. 
    this.fileBasedRadioButton.Checked = value == ConfigType.FILE; 
    this.databaseBasedRadioButton.Checked = value == ConfigType.DATABASE; 
} 
+1

Asseyez-vous avec vos collègues et expliquez pourquoi les paramètres stylecop doivent être modifiés? –

+1

Cela peut être une question stupide, mais je n'ai jamais travaillé pour une société, et je ne sais pas ce que StyleCop est. Est-ce un dispositif néfaste pour arrêter le bon style? Je pense que c'est stylistiquement préférable de mettre des parens autour de chaque expression logique. –

+0

@Rafe Kettler, il y a trop de parens. Pour un très grand projet .Net, StyleCop, FxCop et Re # er (que je n'ai pas encore) sont des outils très précieux. Vous pouvez les pointer vers un projet qui n'est pas lisible, et ils vont aider à le nettoyer un peu. Certaines règles ont plus de sens que d'autres, mais là encore, il est difficile d'arriver à un consensus sur les règles à exclure - tout le monde a des difficultés à les respecter. Donc, nous laissons StyleCop et traitons des choses que nous détestons, car c'est juste 95% du temps. Il ralentit un peu, mais permet d'éviter les mauvais codes (notamment FxCop). Nous sommes d'excellents codeurs mais les outils aident. –

Répondre

3
bool isFile = value == ConfigType.FILE; 
bool isDatabase = value == ConfigType.DATABASE; // or isDatabase = !isFile 

Debug.Assert(isFile || isDatabase, 
"Configuration type must be either 'File-based' or 'Database-based'; it was: " 
+ value.ToString()); 

this.fileBasedRadioButton.Checked = isFile; 
this.databaseBasedRadioButton.Checked = isDatabase; 

Cela en fait un peu plus lisible (déclarant explicitement le bool), vous savez qu'il doit être vrai ou faux.

Et de cette façon, si vous avez besoin (peut-être à l'avenir) de modifier les paramètres en fonction de fichier/base de données dans la même méthode, vous avez déjà la bool à portée de main, au lieu de vérifier chaque fois que

+0

Ne l'améliore pas beaucoup IMHO Le nœud du problème est que la sémantique '= value == ...' est bizarre à première vue. –

+0

Droit, mais il peut être lissé avec deux lignes de commentaires peut-être. Le compilateur d'optimisation le fera rapidement, j'en suis sûr. –

+0

@Hamish, si vous lisez 1 octet à partir d'un fichier ou faites 1 requête SQL, les performances de ce code ne sont pas pertinentes, optimisant le compilateur ou non. Juste un commentaire (non pertinent). –

1

Si vous ne souhaitez pas utiliser l'utilisation de l'opérateur ?:if..else. Bien sûr, il est un peu plus verbeux, mais vous ne passerez pas plus de quelques secondes à comprendre.

Dans quelques mois, lorsque vous reviendrez sur ce code, vous serez heureux d'avoir pris 5 lignes supplémentaires. Rendre le code facile à entretenir devrait être votre priorité numéro 1

if (value == ConfigType.FILE) 
    this.fileBasedRadioButton.Checked = true; 
else 
    this.fileBasedRadioButton.Checked = false; 


if (value == ConfigType.DATABASE) 
    this.databaseBasedRadioButton.Checked = true; 
else 
    this.databaseBasedRadioButton.Checked = false; 
+0

Mais maintenant 2 lignes est allé à 8 (ou 9, si vous comptez le vide) – PostMan

+0

@ PostMan alors quoi? Il peut être compris par même le plus jeune des programmeurs. Chaque fois que vous faites quelque chose de malin pour sauver quelques octets d'espace, vous faites un mauvais service à vous-même ou à quelqu'un d'autre. Laissez ces choses pour le golf de code. Croyez-moi, j'ai déjà été mordu par ce genre de truc avant. Et oui, c'était mon code: P –

+0

Donc nous devrions toujours étendre le code pour qu'il soit plus facile pour les juniors? Je suppose que c'est une question de préférence, car je préfère voir autant que possible sans défilement – PostMan

1

Indentation la deuxième et troisième ligne de la méthode Debug.Assert(). Il devrait alors ressembler à ceci:

Debug.Assert(value == ConfigType.DATABASE || value == ConfigType.FILE, 
    "Configuration type must be either 'File-based' or 'Database-based'; it was: " 
    + value.ToString()); 

Je sais que c'est vraiment un changement de style mineur, mais je l'ai toujours trouvé quand je dois passer beaucoup d'arguments ou avoir une déclaration très longue, quand j'INTEMPOREL à un retour à la ligne je devrais mettre en retrait avant le ;.

Il empêche le Debug.Assert() de ressembler à 3 lignes.

En ce qui concerne le value==, je suis d'accord avec l'affiche précédente. Vous devriez faire un boolisDatabase et isFile pour éviter d'appeler un champ de ConfigType deux fois dans votre premier arg.

+0

Merci d'avoir pris la question au sérieux. J'ai amélioré le formatage. –

Questions connexes