7
votes

Retourne Enum au lieu de Bool de fonction pour plus de clarté?

Ceci est similaire à:

.NET: BOOL VS Enum comme un paramètre de méthode

mais concerne le retour d'un bool d'une fonction dans certaines situations. xxx

utilisé comme ceci: xxx

Ce n'est pas évident du contexte appelant ce que le bool est retourné du sondage () signifie. Il serait peut-être plus clair à certains égards si la fonction "sondage" a été renommée "isfinished ()", mais la méthode fait un peu de travail, et (IMO) ne refléterait pas vraiment ce que fait la fonction. Des noms tels que "isfinis" semblent également plus appropriés pour les propriétés. Une autre option pourrait être de le renommer à quelque chose comme: «Pollandreturniscileished», mais cela ne se sent pas non plus.

Donc, une option pourrait être de retourner une énumération. E.g: xxx

appelé comme ceci: xxx

mais cela ressemble à une overkill. Des idées?


5 commentaires

Pas une mauvaise question, mais ne vous sentez-vous jamais comme votre surroptimisation? Êtes-vous toujours productif si vous vous demandez à propos de chaque petit détail?


Qu'en est-il de public Enum bool {vrai, false, filenotfound} ?


@Konerak - Ouais, vous pourriez avoir raison. C'est une de ces petites choses que je rencontre occasionnellement et je me demandais s'il y avait une meilleure façon plus claire.


Tout est basé sur votre mode de maintien du code. Si vous voulez le rendre plus lisible, allez avec le type d'enum.


+1 Pour tenter de rendre le code plus clair, un trait rare ces jours-ci.


5 Réponses :


1
votes

Si vous avez plus de 2 états, utilisez un Enum code>, sinon utilisez simplement un bool code>.

edit: p>

comme votre exemple , vous pouvez facilement utiliser les deux, si nécessaire. P>

public bool IsRunning  { get {return Poll() == Running; }}
public bool IsFinished { get {return Poll() == Finished; }}


4 commentaires

Vous ne devriez pas exécuter une longue fonction dans une propriété comme celle-là. Si vous en avez vraiment besoin, vous devez définir un champ local au sein du sondage () et retourner cela dans la propriété.


@Jouke van der Maas: Je ne sais pas les détails de la mise en œuvre, donc je ne fais que sur ce qui a été donné.


Vous pouvez assumer que la méthode "sondage" est relativement coûteuse à appeler (par exemple, appeler un réseau). Désolé si je n'étais pas clair.


@Moe sisko: sondage est un choix terrible nom alors. Quelque chose comme QueryStatus pourrait être plus intuitif.



2
votes

Tout d'abord, le code est destiné aux personnes à lire et, dans votre cas, la version Enum est plus lisible que la version BOOL.

EDIT:

Un autre avantage de la version Enum est que vous pouvez facilement ajouter d'autres statuts si vous avez besoin. Comme erreur par exemple.


0 commentaires

3
votes

Je suis la convention .NET que les propriétés booléennes sont préfixées avec "IS" et des méthodes booléennes sont préfixées avec "Essayer" (ou "ou" est "le cas échéant).

Dans votre cas, je pense que le problème est dans le nom "Sondage". Nommez la méthode indiquant ce qu'elle fait ou interrogatoire. par exemple. trydosomething ()


0 commentaires

3
votes

Une méthode doit être lue comme un verbe , et le résultat de la méthode Bool Sondage () est trompeur et c'est probablement pourquoi il se sent gênant à utiliser. xxx

Lorsque je lisais votre code, je pensais que cela disait tandis que (le système est) ne pas interroger, faire quelque chose

mais il dit vraiment ... sondage, et si ce n'était pas fini, sondez quelque chose pendant que nous attendons.

Votre version Enum semble avoir changé la sémantique de l'appel, mais pour le meilleur, C'est pourquoi les gens comme ça. tandis que le sondage () est toujours en marche, faites quelque chose pendant que nous attendons.

Le code le plus lisible gagne.


0 commentaires

0
votes

J'ai lu et reluez ce que vous essayez de faire. Pour moi, le sondage devrait signifier exactement que vous interrogez pour quelque chose. Ensuite, je vérifierais le statut s'il est toujours en cours d'exécution.

Mon code résultant ressemblerait à ceci. xxx

Remarque: Isrunning est un getter / setter. Cela serait-ce plus clair?


0 commentaires