if (condition1) block1
else if (condition2) block2
if (condition1) block1
else
{
if (condition2) block2
}
Je présume qu'ils compilent aussi à la même assemblée, il devrait donc y avoir aucune différence.
Ne serait-ce pas dépendent de la langue? Bien que je ne peux pas penser à une langue où vous n'êtes pas correct, je peux créer un 🙂 +1 pour la compilation de la partie Rune, vous avez raison! 🙂 Mais la syntaxe C a pris le dessus sur le monde d'aujourd'hui. Où est vieux cobol sans l'arithmétique de symboles...
if(A and B) {
statement1
}
else if(A and C) {
statement2
}
Mon conseil est de s'efforcer pour des raisons de lisibilité et de vérifier votre logique. Vous pouvez trouver DeMorgan les Lois de utile pour ré-organiser votre logique.
Voici un qui toujours m'énerve:
if(A and B) {
statement1
statement2
}
else if(A and C) {
statement1
statement3
}
else if(not A) {
statement4
}
Je ne sais pas qui est plus lisible. Ils sont logiquement équivalentes. Le premier est plus sous forme de tableaux et plus facile sur les yeux, mais répète-ci statement1; la seconde est plus imbriquées et un peu plus laid (à mes yeux), mais ne répète pas les états. Finalement, c'est un jugement d'appel, parce qu'il ne fait pas de différence pour le compilateur.
Dans la première version de la répétition du code, donc je serais certainement choisir de mettre en œuvre le 2ème, ce qui rend également plus lisible à mon avis. Répété lignes est un peu plus de ballonnements.
Imbriquée if-then-else les structures de contrôle sont réduites au minimum traductions de la logique complexe de règles. Ils sont bons en évitant la redondance dans la vérification des conditions. Leur principal inconvénient est que, dans le long terme, ces structures peuvent croître et se faire enfermer méthodes trop importante et trop complexe. Première étape de la rupture imbriquée if-then-else blocs est la normalisation. Par exemple:
if (A) {
if (B || C) {
block 1;
} else {
if (!D) {
block 2;
}
}
} else {
block 3;
}
peut être normalisée en cascade if-then-else
if (A && (B || C) {
block 1;
return;
}
if (A && !B && !C && !D) {
block 2;
return;
}
if (!A) {
block 3;
}
Nous avons éliminé else blocs et a fait de nouvelles méthode d'extraction de refactoring facile. Tous les trois si les blocs peuvent être extraites de méthodes distinctes nommé d'après la logique métier de leurs organes d'exécution.
J'aime cette idée mais je pense que cette mesure devrait être pour la garde des clauses, plutôt que de base de la fonction logique. En Plus de nombreux environnements professionnels de placer des restrictions sur le nombre de déclarations d'une fonction peut avoir cette approche ne peut pas voler. J'ai vu des méthodes de plus en plus comme un cancer au bout d'un certain temps en raison de imbriquée si-alors-sinon clauses. Quand ils doivent être entretenus par de nombreuses personnes, personne n'a le courage ou la volonté de les séparer à plusieurs méthodes. De "normalisation" permet à cette refactorisation et du code de mieux en mieux sur la fin. Les Tests sont un excellent substitut pour le courage. Je suis tout à fait contre "normalisation" comme l'exemple ci-dessus, principalement parce que vous n'obtenez pas une façon naturelle de vérifier si tous les cas ont été couverts. Dans le imbriqués exemple, il est très facile de voir comment le cas est en cours de traitement, ce qui n'est pas le cas avec l'exemple ci-dessous. Aussi, il est très facile de faire des erreurs dans l'exemple ci-dessous, par exemple par l'oubli de la négation de C ou D dans le milieu si.
Ces deux sont équivalentes:
Je présume qu'ils compilent aussi à la même assemblée, il devrait donc y avoir aucune différence.
+1 pour la compilation de la partie
Rune, vous avez raison! 🙂 Mais la syntaxe C a pris le dessus sur le monde d'aujourd'hui. Où est vieux cobol sans l'arithmétique de symboles...
OriginalL'auteur abc
Je dépend de la façon dont vous les organiser. Une étude s'est équivalent à l'ajout d'un et à chacun de l'intérieur de la fi:
est équivalent à:
Mon conseil est de s'efforcer pour des raisons de lisibilité et de vérifier votre logique. Vous pouvez trouver DeMorgan les Lois de utile pour ré-organiser votre logique.
Voici un qui toujours m'énerve:
vs
Je ne sais pas qui est plus lisible. Ils sont logiquement équivalentes. Le premier est plus sous forme de tableaux et plus facile sur les yeux, mais répète-ci statement1; la seconde est plus imbriquées et un peu plus laid (à mes yeux), mais ne répète pas les états. Finalement, c'est un jugement d'appel, parce qu'il ne fait pas de différence pour le compilateur.
OriginalL'auteur charlieb
Imbriquée
if-then-else
les structures de contrôle sont réduites au minimum traductions de la logique complexe de règles. Ils sont bons en évitant la redondance dans la vérification des conditions. Leur principal inconvénient est que, dans le long terme, ces structures peuvent croître et se faire enfermer méthodes trop importante et trop complexe. Première étape de la rupture imbriquéeif-then-else
blocs est la normalisation. Par exemple:peut être normalisée en cascade
if-then-else
Nous avons éliminé
else
blocs et a fait de nouvelles méthode d'extraction de refactoring facile. Tous les trois si les blocs peuvent être extraites de méthodes distinctes nommé d'après la logique métier de leurs organes d'exécution.J'ai vu des méthodes de plus en plus comme un cancer au bout d'un certain temps en raison de imbriquée si-alors-sinon clauses. Quand ils doivent être entretenus par de nombreuses personnes, personne n'a le courage ou la volonté de les séparer à plusieurs méthodes. De "normalisation" permet à cette refactorisation et du code de mieux en mieux sur la fin.
Les Tests sont un excellent substitut pour le courage.
Je suis tout à fait contre "normalisation" comme l'exemple ci-dessus, principalement parce que vous n'obtenez pas une façon naturelle de vérifier si tous les cas ont été couverts. Dans le imbriqués exemple, il est très facile de voir comment le cas est en cours de traitement, ce qui n'est pas le cas avec l'exemple ci-dessous. Aussi, il est très facile de faire des erreurs dans l'exemple ci-dessous, par exemple par l'oubli de la négation de
C
ouD
dans le milieu si.OriginalL'auteur Boris Pavlović