Question

Vous avez une séquence de fonctions à exécuter. Cas A: Ils ne dépendent pas de l'autre. Lequel de ces est mieux?

function main() {
  a();
  b();
  c();
}

ou

function main() {
  a();
}

function a() {
  ...
  b();
}

function b() {
  ...
  c();
}

Cas B: Ils ne dépendent la réussite du précédent

.
function main() {
  if (a())
    if (b())
      c();
}

ou

function main() {
  if (!a()) return false;
  if (!b()) return false;
  c();
}

ou

function main() {
  a();
}

function a() {
  ... // maybe return false
  b();
}

function b() {
  ... // maybe return false
  c();
}

Mieux, bien sûr, des moyens plus gérables et plus facile à suivre.

Était-ce utile?

La solution

Cas A: 1.
Raisonnement: Étant donné qu'aucune des fonctions dépendent les uns des autres, en les appelant en ordre principal montre une séquence logique des événements. Votre alternative où ils appellent la suivante à la fin de chaque fonction ressemble le code spaghetti, et il est difficile pour quelqu'un la lecture de votre programme à suivre.

Cas B: Aucun de ces éléments.

function main() {
    return a() && b() && c();
}

Raisonnement: Il semble que vous ne se soucient pas vraiment de la valeur de retour, vous voulez juste de sortir tôt si l'une des fonctions retourne une certaine valeur. Vous pouvez retourner le résultat « anded » de toutes ces fonctions, et si l'un de ces faux retours le code éclatera tôt. Donc, si un rendement faux alors b ne sera pas en exécution. Placer tous sur une ligne est facile à lire et montre de façon concise qu'ils dépendent les uns des autres.

Autres conseils

Cas A: première option

Si vous utilisez la deuxième option, vous le rendre beaucoup plus difficile à réutiliser un parce que vous tirez dans b et c automatiquement.

Cas b: depends - faire a, b et c renvoient des valeurs booléennes naturellement, ou une autre valeur pour vérifier? Je ne voudrais pas encore un b appel et b appel c, parce que vous présentez une dépendance inutile. Si les valeurs de retour du sens, je me penche vers l'option 2 - imbrication moins est une bonne chose

.

Tout d'abord, la meilleure réponse dépendra de plusieurs aspects du contexte du code est -. Il n'y a pas un droit réponse autre que « ça dépend »

Cependant, en prenant à leur valeur nominale, Cas A:

Option 1 représente une vue au niveau de la partie supérieure de l'algorithme.

Option 2 cache ce, les appels à B & C sont cachés. Il pourrait être tout à fait beaucoup de travail pour découvrir la C a été appelé. En outre, il est plus difficile à tester A & B dans l'isolement si elles appellent alors d'autres méthodes. Principal peut toujours tester si A, B et C peuvent être moquaient.

Cas B: Il est fréquent d'avoir des arguments plus ayant une point de sortie vs de multiples points de sortie dans une méthode. Parfois, plusieurs points de sortie peuvent rendre le code plus simple, ce qui le rend plus maintenable, d'autres fois il est pas évident quel impact un retour a, ou qu'un retour aura lieu, ce qui le rend moins maintenable.

Option 1 montre l'algorithme explicitement, mais plusieurs imbriqué si ce peut rapidement sortir de la main. Dans ce genre de cas, je serais certainement avoir l'option 2 ou une variante booléenne intelligente (oui, corey).

Option 3 Me semble simplement obtus.

Cas A: première option

Cas B: deuxième option

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