7
votes

Dans une déclaration if-else pour un retour de méthode, un autre doit-il être explicitement indiqué s'il peut être suivi implicitement?

J'ai une méthode qui vérifie certaines choses et retourne un booléen basé sur ces chèques. Cela implique une seule ramification si la section vérifie environ 5 conditions de séquence. Si l'une de ces conditions retournez true, la méthode sera RETOUR TRUE; CODE>. Si aucune des conditions ne renvoie true, la méthode retourne faux; code>. Étant donné que le code après la section IF ne fonctionnera que si aucune des conditions n'est vraie, ce code est logiquement identique à l'inclusion d'une déclaration réelle.

C'est donc une meilleure idée de réellement écrire dans la déclaration d'autre pour ce type de situation? p>

Modifier strud> P>

Il s'avère que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que j'avève que ça compte Des informations sur quelle condition ont réellement déclenché le "vrai" pour certains d'entre eux, j'ai donc changé la méthode pour renvoyer une INT, avec -1 représentant la "fausse" situation. La logique reste toujours, si aucune des conditions n'est vraie, cela retournera -1. Donc, je n'ai plus l'option condensable de retour (Cond1 || cond2 || cond3 || cond3 || cond 5); Cond>, mais je remercie tout le monde pour cette suggestion aussi, puisque j'avais effectivement pensé À propos de cela (principalement parce que Cond3 est une condition très complexe impliquant une vérification de l'intersection dans les points médians de deux paires d'objets DateTime, de sorte qu'il semblerait laid). Tandis que la nature de la méthode a changé, la nature de cette question n'a pas et toutes les réponses sont toujours essentiellement applicables ... p>

Le code est actuellement, pour la paraphraser et couper tout le code superforé qui définit Cond1 thru Cond5 ... P>

if (cond1) { return 1; }
else if (cond2) { return 2; }
else if (cond3) { return 3; }
else if (cond4) { return 4; }
else if (cond5) { return 5; }


1 commentaires

Passez en revue les réponses de chacun ... Merci encore à tout le monde! La réponse de chacun était utile et correcte. J'ai fait mon choix de faire correspondre ce que j'ai réellement mis en œuvre, et je me trouve d'accepter d'initialiser la valeur par défaut au début. Merci encore!


7 Réponses :


4
votes

Tout ce qui exprime votre intention le mieux et / ou est le plus lisible.

Toutes les options suivantes sont parfaitement valides: p> xxx pré>

ou p> xxx pré>

ou p>

return condition1
    || condition2
    || condition3;


0 commentaires

12
votes

C'est vraiment une question de style et de ce que vous (et ceux que vous travaillez) trouvez plus clair. en général, je trouve personnellement la structure: xxx

plus clair que: xxx


3 commentaires

Je conviens que c'est une question de style et personnellement, je préfère le contraire de ce que vous préférez! Cette dernière option ci-dessus est plus propre et comporte moins de code, et je le préfère pour cette raison.


La première option est plus facile à refacteur dans une nouvelle méthode, c'est pourquoi c'est mieux.


J'ai tendance à préférer un seul point de sortie d'une méthode lorsqu'il est possible sans compliquer la logique du code. Je trouve que les méthodes avec un seul point de sortie sont plus faciles à comprendre, refacteur et à entretenir. Il existe également un endroit pratique pour mettre un point d'arrêt dans lequel vous pouvez toujours modifier la valeur de retour avant de permettre un flux d'exécution à reprendre.



1
votes

Sans voir votre code, il est difficile de dire, mais étant donné que vous avez un certain nombre de conditions qui produisent un vrai , il serait peut-être plus clair pour que le code tombe à travers et avoir une finale renvoie false; à la fin: xxx


0 commentaires

2
votes

On dirait que vous demandez si ceci: xxx pré>

peut être transformé en ceci: p> xxx pré>

oui. p>

Considérez cela aussi: P>

return
   (condition1) ||
   (condition2) ||
   (condition3) ||
   (condition4) ||
   (condition5);


0 commentaires

0
votes

Ceci est purement une question de style et de goût.

Ma préférence personnelle est d'inclure l'autre uniquement s'il y a une ou des situations. xxx

si Il y a plusieurs retours dans une méthode, puis je vais omettre la finale d'autre. xxx

Ce schéma semble donner la plus grande clarté, à mon avis.


0 commentaires

5
votes

J'ai tendance à préférer quelque chose comme ça pour renvoyer des valeurs dures. XXX


2 commentaires

IMO Ceci est un candidat parfait pour le raccourcir le retour (Arg.Longueur <10) || arg.startswith ("foo") || arg.endswith ("foo")


Bien sûr, mais ce ne sont pas ce que j'appellerais des conditionnels réalistes. L'intention est que je pense que c'est mieux définir une valeur par défaut à votre résultat de retour et processus à ce sujet que de saupoudrer des déclarations de retour partout. Je ne pense pas que ce qui a mal d'avoir plus d'une déclaration de retour, pensez simplement que cela blesse la clarté d'avoir une tonne de déclarations de retour et qu'il rend également plus difficile de déboguer.



3
votes

Personnellement, je préfère généralement utiliser l'autre parce que je pense que cela rend l'intention plus claire. Si vous écrivez

if (sensorScan()==ENEMY)
  return FIRE_PHASERS;
else
  return SEND_GREETING;


1 commentaires

Jay, avez-vous une URL que je peux partager avec mon collègue? Il ne comprend pas si sinon enchaînant et ne voit pas pourquoi ils ne peuvent pas être indépendants si des déclarations. Je lui ai dit que le sinon a une signification sémantique mais je ne me demande pas à travers et je me demande s'il y a une meilleure façon de le phraser.