Question

Je me demandais simplement quel était le consensus général sur le retour des énumérations à partir des méthodes indiquant le statut. La notion de codes de retour (ints) est assez innée dans la programmation système oldschool (C), mais je me demande si la méthodologie pour indiquer le statut a changé.

merci

Modifier: Je suis conscient que les enums sont essentiellement des valeurs int. Je me renseigne sur la pure pratique qui consiste à faire en sorte que les méthodes commencent à définir des codes de statut (qu'il s'agisse d'énums ou d'ints) pour indiquer les statuts. Cela semble être une bonne pratique, mais je me demandais s’il existe un sentiment négatif à propos de cette idée.

Je choisirais toujours un enum plutôt qu'un retour int pour un code de statut.

Était-ce utile?

La solution

Si vous renvoyez des énumérations pour indiquer des erreurs au lieu de lancer des exceptions, vous êtes bien sûr en état de péché.

Les appelants sont-ils vraiment intéressés par l'état de quelque chose? J'ai généralement trouvé ce genre de chose dans les bibliothèques de fonctions de style C où aucun objet ne représente l'état. Cela dépend de ce que vous essayez de faire, mais si vous créez (par exemple) du code pour gérer les sockets de communication, je vous recommande fortement de les encapsuler dans des classes et de permettre au code client de détecter leur état par le biais de propriétés plutôt que par suite Méthode Open ().

Autres conseils

Si tout ce que vous voulez, c'est un statut retourné, alors une enum est un bien meilleur moyen que d'aller simplement un int pour un certain nombre de raisons. Cela force la cohérence à ce que signifie quoi afin que vous n'ayez pas à vous souvenir du code de retour 1 signifie, rendant votre code beaucoup plus maintenable.

Comme une énumération est fondamentalement juste un int, cela fonctionnera très bien. Vous obtenez le bonus supplémentaire d'intellisense.

Cela suppose que vous souhaitiez connaître le statut de votre appel de fonction. Si vous recherchez un statut système / global, vous pouvez l'exposer sous forme d'événement.

Pensez simplement à voix haute ici, mais pourquoi ne pas simplement renvoyer un objet (classe), le Type qui dépendra de la façon dont vous devez l’utiliser. Par exemple, une classe peut contenir uniquement une chaîne de message, tandis qu'une autre peut contenir un nombre entier d'enregistrements mis à jour.

Retourner des entiers bruts (pour status et des choses du genre) et ne pas cacher leur nature numérique par des constantes (ou si le langage ne prend pas en charge les constantes réelles, les variables traitées comme des constantes par convention) sont une très mauvaise pratique, même dans les anciennes langues comme C. C'est une source de nombreux bugs et maux de tête sans fin.

De plus, les énumérations de style C # fournissent (en partie) une sécurité de type et font moins de place pour toutes sortes d’erreurs et de bugs. Vous devriez certainement les utiliser. Il s’agit donc vraiment d’une amélioration par rapport au retour d’un entier puis à sa comparaison avec une constante d’entier. Si la langue fournit une fonctionnalité, pourquoi ne pas l’utiliser?

Pontus Gagge a le droit: encapsulez vos méthodes dans une classe et exposez l'état à l'aide d'une propriété.

De plus, gardez à l’esprit le danger lié à l’utilisation d’énums: vous pouvez convertir n’importe quel nombre entier. Cela compilera et fonctionnera parfaitement:

public enum Status
{
    Good,
    Bad,
    Indifferent
};

public class Program
{
    static void Main(string[] args)
    {
        Status s = (Status) 30;
    }
}

Il est fondamentalement dangereux de supposer qu'une variable d'un type enum contient l'une des valeurs possibles; il peut inclure une valeur impossible.

J'y ai réfléchi (et utilisé un petit peu) et j'ai trouvé qu'il était plus utile de simplement renvoyer un booléen, un entier ou d'aller jusqu'au-dessus de la création d'une classe pour retourner un état et des valeurs associé à cet état, et je trouve vraiment pratique de retourner un enum simple : mon code semble plus lisible et je n’ai pas tout le fardeau de l’exception car, à en lire un: l'exception devrait être exceptionnelle =)

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