Je suis curieux de voir toute alternative (s) à la règle (S) si des déclarations telles que de sorte que vous constatez tout si les déclarations sont séparées et sans condition d'autre. Veuillez noter que X y Z sont totalement séparées des conditions, alors le commutateur ne conviendrait pas. P> P>
11 Réponses :
C'est la solution la plus simple, Modifier P> Vous pouvez essayer d'appliquer void doAIfX() {
if (!X) {
return;
}
// do 'a'
}
Je fais cela dans le micrologiciel pour un appareil pouvant avoir de nombreuses options différentes activées ou désactivées. Je préférerais avoir mon principal () appelez des choses comme DofooNifEnabled () que de l'encombrer avec beaucoup d'ifs et de #Ifdefs.
Comme n'importe quel motif, il y a des moments où il devrait être utilisé, et fois quand cela ne devrait pas.
Cela dépend vraiment de ce que X, Y, Z et A, B, C. Parfois, si des déclarations sont plus appropriées. Parfois, le polymorphisme est plus approprié. P>
Les alternatives à si-ele code> en Java sont l'instruction de commutation et le ternaire conditionnel ( ?: strong>) opérateur, qui n'est pas exactement ce que vous demandez (gérer juste un
si code> si code> sans
sinon code>). Le code que vous avez posté est le meilleur moyen de le faire, à mon avis. P>
Conditions multiples en ternaire:
Utiliser le polymorphisme.
Des commentaires sur la raison pour laquelle vous avez bowvote? N'est-ce pas une alternative? Ou n'est-ce pas assez bon d'être mentionné?
Je considérerais seulement une solution polymorphe si mon conditionnel était déjà basé sur type b>. Je ne créerais pas une hiérarchie de classe entière juste pour remplacer
Si beaucoup de cas cela a du sens. Voir YouTube.com/watch?v=4f72vulwfvc - Discussions de Google Tech. (The Netty Code Talks - Héritage, Polymorphisme et test) Je considère que le bowvote ne va pas.
Direct des diapositives de Misko: "Parfois un
Évidemment, cela dépend de ce que cela signifie "faire un". Le polymorphisme pourrait bien être une excellente solution, mais l'exemple est simplement trop générique pour avoir une solution unique pour tous les cas. Aurbédalier, etc. sont généralement résolus à l'aide de motifs de décorateur / composition pour une solution de type polymorphisme.
votes
interface SomethingDoer {
public void doSomething();
}
class ADoer implements SomethingDoer { ... }
class BDoer implements SomethingDoer { ... }
class CDoer implements SomethingDoer { ... }
public class Main {
public static void main (String[] args) {
SomethingDoer doer = new SomethingDoerFactory(args).getDoer();
doer.doSomething();
}
}
si (x) faire un; code>
si code> est juste un
si code>". Sauf si vous réutilisez ces déclarations dans de nombreux endroits, cela va faire des choses complexes inutiles. Aussi: votre solution est incomplète. Et si les deux conditions X et Y sont-elles tenues? Vous avez manqué Aandbédoer, Aandcédalier, Bandcédalier, Aandbandcédalier; Celles-ci sont bien couvertes par le code d'origine.
Une réponse "vraiment orientée objet" serait de définir une interface pour "règle" (avec des méthodes de condition () et d'action ()), créer 3 implémentations, les garnir dans une collection, puis les iTerez-les génériquement comme dans:
rules.parallelStream().filter(Rule::condition).forEach(Rule::action);
Vous pouvez utiliser une carte pour O (1) heure, plutôt que O (n).
Une carte ne fonctionnera pas ici, car la condition est unique à chaque mise en œuvre de la règle. La carte nécessite une clé réelle et non un code enterré dans une méthode appelable.
La réponse courte est oui.
Il y a quelques temps, vous pouvez éviter d'utiliser si pour l'évitement conditionnel et la ramification ensemble. Et ils ont des moments de pertinence. p>
attribution référencée, lorsque vous connaissez les valeurs initiales possibles et que 1 à 1 corrélation avec les valeurs de retour. Les listes sont meilleures que des tableaux pour cela, mais ...
p>
if (thisCondition == true) { b = true; } else { b = false; }Branchement référencé, lorsque vous connaissez les valeurs initiales possibles et que 1 à 1 corrélation avec la fonction / la branche à utiliser. (Exemple pas Java) P>
// Example: if (a==1) { doSomething1(); } if (a==2) { doSomething2(); } // Becomes function * fx(2); // our array or better still, list of functions fx[0] = &doSomething1; fx[1] = &doSomething2; `fx[ a - 1 ](); `mission booléenne directe. p>
Nous détestons: p>
// Example: if (a==1) { b=2; } if (a==2) { b=17; } // Becomes int fx(2); // our array of answers fx[0] = 2; fx[1] = 17; b = fx[ a - 1 ];
Vous devrez avoir ces déclarations quelque part. p>
Ils peuvent être refacturés dans d'autres méthodes pour conserver la méthode actuelle propre, car d'autres ont suggéré. Si vous avez besoin de réutiliser cette même STRAND> SET STRAND> de si des instructions dans un certain nombre d'endroits, il est utile fort> peut utiliser le motif de décorateur . P>
Cela ressemble à un cas parfait pour utiliser
Du ... myanimator (chose, pos, vitesse | costumeeseed ()); p>
si vitesse === indéfini em> il sera alors calculé. Je pense. P>
Cela dépend vraiment du contexte ... mais oui si-d'autre n'est que l'une des em> instruction de contrôle em> en Java: https://docs.oracle.com/javase/tatutorial/java/ Nutsandbolts / Flow.html P>
Faites quelque chose comme ça, implémentez Enum basé sur la méthode de l'état et de l'appel d'appel.
Alors que la curiosité pourrait être humoristique ... Pourquoi voudrais-je vouloir une alternative si, surtout quand une condition est que le commutateur ne convient pas? Comme si Java n'était pas assez gonflé déjà ...
Soit ce que vous essayez de faire est stupide (si c'est génial!), ou vous devez donner plus d'informations. Je peux imaginer une situation dans laquelle le code comme celui-ci pourrait être traité avec un modèle de messagerie ou autre chose qui est intéressant (à condition que votre situation ne soit pas aussi simple que celle que vous l'avez expliquée).
Qu'attendez-vous que cette alternative prévoit que le code présenté ne peut pas? (moins de caractères, plus de lisibilité?)
Eh bien, je suis juste en exploration, je sais que "si" la déclaration est élégante et facile à lire, mais une connaissance supplémentaire ne fait jamais mal :)
@Hellnar: Il y a des connaissances supplémentaires qui ont de la valeur et il y a une indigne de golf de code obscur.
en quantité suffisante,
si code> les déclarations sont toxiques