9
votes

Qui est le moyen plus approprié de la programmation

Si une variable peut prendre n valeurs si nous devons vérifier la validité des valeurs ou supposer que si tous les chèques NI échouent, il s'agirait de la nième valeur.

Par exemple si nous avons une variable qui stocke le sexe en tant que m ou F. Utilisez ceci: xxx

ou ceci: xxx


8 commentaires

Lorsque vous postez ici, indentez votre code correctement et bien le format avec le bouton 1010 au-dessus de la zone d'entrée de texte.


Désolé j'ai réalisé si après que je frappe la soumission. Merci beaucoup!


Pendant ce temps, dans le monde réel, le genre n'est pas une valeur booléenne. Il y a beaucoup de gens de Gendenderquisser.


@Trig dans le monde réel Chaque forme que j'ai jamais vu avait un homme / femme, pas un homme / femme / autre s'il vous plaît expliquer dans la case ci-dessous.


Le domaine / est / plus grand que le simple mâle / femme - par ex. Inconnu, homme, femme, organisation


@John, le fait que Gendenderquiere est actuellement un groupe minoritaire marginalisé n'est pas une raison pour perpétuer leur oppression. blag.xkcd.com/2010/05/06/sex-et -Gender


Je ne suis pas sûr même qu'un hermaphrodite ne puisse pas être classé comme l'un ou l'autre, séparer peut-être des cas extrêmes.


John, si vous avez passé autant de temps à lire le projet Bilerico, Mélange de la maison de Pam et Box Turtle Bulletin comme moi, vous sauriez à quel point vous êtes mal. La réalité est compliquée. Faites avec.


10 Réponses :


4
votes

Bientôt - cela dépend de quel type la variable est. Si c'est un booléen ou une énumération d'une sorte et il n'y a pas d'autre valeur qu'il ne peut avoir possible (y compris null ), une clause simple sinon suffira.

vous pouvez Même ajouter un commentaire simple, comme: xxx

avoir quelque chose comme ceci semble juste ce qui semble faux: xxx

la ligne inférieure: < fort> avoir un si / ele / sinon si clause pour chaque scénario possible, mais pas plus que celui-là et le conserver Lisible.


0 commentaires

0
votes

Si une troisième valeur, autre que M ou F, est possible, vous devez utiliser le deuxième formulaire. Si la variable testée est d'un type qui ne peut supporter que les valeurs M et F, vous devez utiliser le premier.


3 commentaires

Pas nécessairement. Si une valeur (aucune) valeur autre que m ou f est possible, il se peut qu'ils veulent "do_female_stuff ()" comme l'action par défaut - auquel cas, vous ne voulez toujours que deux options ("m" ou Autre ). Cependant, vous voudriez certainement commenter que c'est une défaillance intentionnelle.


Je suis tellement content que vous n'ayez pas inclus d'illustration de cela.


@HEMP Il est évident du deuxième exemple de l'OP, qui est censé être congruant avec le premier, que ce n'est pas le cas.



2
votes

... ou, dans Oo World, vous pouvez créer une classe de base, dire sexe et l'étendre avec mâle et femelle . Au lieu d'assigner une valeur 'M' ou 'F' à une variable, vous pouvez attribuer une instance de classe masculine ou féminine. Ensuite, appelez simplement une méthode spécifiée dans la classe de base, par exemple dogenderspecificStuff () . Pas besoin de si-Elses là-bas.


4 commentaires

OP demande spécifiquement des clauses de l'autre. Bien sûr, cela peut être fait de manière OO, mais ce n'est pas la question.


@YUVAL: Si l'OP trouve cette réponse inappropriée, je le supprimerai. Mais s'il vous plaît laissez l'OP décider.


@VoodooChild: Vous en avez peut-être encore besoin avec des valeurs booléennes.


Même si vous utilisez le polymorphisme pour exposer la sélection, la sélection doit encore être faite. Par exemple, si l'ensemble de données ne contient que "M" ou "F", vous aurez besoin, par exemple, une méthode d'usine à choisir en fonction de la valeur (m ou f) s'il faut construire un objet mâle ou un objet féminin. Cette méthode d'usine contiendra probablement un commutateur IF / SORE ou un commutateur - qui est toujours la question que l'OP est posé.



10
votes

Pour cet exemple, je n'utiliserais pas du tout, je n'utiliserais pas le commutateur pour votre deuxième exemple xxx

ou pour votre premier exemple, je traiterais simplement des exceptions comme une erreur en utilisant assert xxx


2 commentaires

Toutes les langues ne peuvent pas commutateur sur tous les types de variable ... La plupart des langues ont cependant des constructions si-...


+1 - pas pour le commutateur, mais juste pour traiter le troisième cas. Vous - devrait traiter le troisième cas - peu importe si c'est un sinon , défaut , affirme ou toutefois Tu le fais. Vérifiez-le. Votre disciple / futur soi-même vous remerciera.



1
votes

Pour ce type de construction, j'aime utiliser l'instruction de commutation. Pas parce qu'il est plus court (ce n'est pas), mais il est plus lisible (IMHO):

switch(gender) {
  case "M":
    doMaleSpecificStuff();
    break;
  case "F":
    doFemaleSpecificStuff();
    break;
  default:
    throw AnyError;
}


0 commentaires

1
votes

Si les valeurs de GENDE ne peuvent être que "M" ou "F", alors vous pouvez utiliser une affirmation pour en faire clairement:

Assert(gender = "M" OR gender = "F")
If gender = "M"
   do male_processing
else
   do female_processing
endif


0 commentaires

0
votes

Lors de l'énumération des moyens de gérer les différentes formes possibles d'un type de données, vous devez utiliser le motif correspondant si votre langue prend en charge ou, si ce n'est pas le cas, changez (la correspondance du motif de l'homme pauvre). La principale raison de ceci est que le type de données devrait-il être étendu avec plus de formulaires potentiels, vous souhaitez être averti au moment de la compilation d'une correspondance de modèle incomplète (ou d'une instruction de commutation.) Vous pouvez donc vous reposer facilement en sachant que des types de données doivent être étendus, Vous en saurez à ce sujet plus tôt que plus tard.

L'utilisation d'un boîtier par défaut annule malheureusement de tels avantages, donc dans la plupart des situations, vous devriez préférer énumérer toutes les possibilités connues explicitement.


0 commentaires

0
votes

S'il y a une entrée d'utilisateur pour 'F' ou 'M', vous devriez menacer 3 scénarios, c'est-à-dire. F, m et autres. S'il n'y a pas d'entrée utilisateur, vous pouvez utiliser deux et avoir une valeur BOOL, c'est-à-dire. Ismale pour l'instruction si elle serait donc beaucoup plus lisible.


0 commentaires

1
votes

Si vous utilisez du type énuméré, il n'aura que les valeurs que vous attendez et vous n'avez pas à gérer des valeurs inattendues dans le cas échéant, uniquement à la mission.


0 commentaires

0
votes

Essayez de vérifier les entrées et de normaliser dès que possible, vous pouvez utiliser la première option en toute sécurité.

Si votre interface utilisateur permet à l'entrée de cette variable d'être quelque chose (par exemple une zone de texte), puis dans votre exemple, vous pourriez obtenir "M", "homme", "homme", "garçon" ou "männlich" ou "männlich" Les contributions honnêtes possibles pour hommes, avant même d'envisager que quelqu'un puisse proférer une réponse stupide. En vérifiant (et normalisant) ces valeurs avant de devoir les utiliser, vous pouvez proposer des commentaires plus réactifs à l'utilisateur.

Si votre interface utilisateur le contrainte à une touche radio, elle est normalisée même plus tôt.

Si la valeur est extraite à partir d'une sorte de magasin de données, en fonction de l'application et de votre connaissance de l'intégrité de ce magasin de données, il peut ne pas être une valeur dans la vérification de la validité de l'enregistrement avant d'être agi. sur les valeurs détenues dans.

Si la plupart des enregistrements sont susceptibles de se conformer et que les actions que diverses valeurs invoquent sont bon marché et réversibles, j'utiliserais la deuxième option et lancer une exception si une valeur est inappropriée.


0 commentaires