Lorsque j'utilisais Java pour le travail auparavant, il y avait un processus difficile à comprendre, alors je l'ai refactoré.
C'était comme ça avant la refactorisation.
private void doProcess() {
A a = initial();
if (!chkfnc1(a)) {
throw new XXXException(x1);
}
if (!chkfnc2(a)) {
throw new XXXException(x2);
}
if (!chkfnc3(a)) {
throw new XXXException(x3);
}
execute(a); //Traitement d'exécution après contrôle
}
private boolean chkfnc1(a) {}
private boolean chkfnc2(a) {}
private boolean chkfnc3(a) {}
Obtenir l'instance -> Vérifier l'authenticité de l'instance (n fois) -> Processus d'exécution C'est un flux.
Supposons que «chkfncN» circule dans une séquence et ait une dépendance d'ordre.
Si cette situation persiste, si l'exigence de vérification augmente de un, il sera difficile de déterminer quand la fonction chkfncN
sera vérifiée, et ce sera dégoûtant.
Enum Quand j'entends Enum,
--La correspondance avec des valeurs numériques peut être prise
Etc. Je pense que la plus grande caractéristique à mon avis est que la commande est garantie.
Fait également partie de la définition de la classe de type Enum de Haskell
class Enum a where
succ :: a -> a --Fonction affichant les valeurs suivantes
pred :: a -> a --Fonction affichant la valeur précédente
Est défini.
Aussi en Java Enum
for (DaysOfWeekEnum day : DaysOfWeekEnum.values()) {
}
Il peut être traité dans l'ordre comme celui-ci
Java Enum ** Les fonctions peuvent être définies dans Enum ** https://qiita.com/KeithYokoma/items/9681b130ea132cfad64d
Sur la base de ce qui précède, vous pouvez le faire.
public enum MyChecker {
CHK1 {
@Override
public boolean chkfnc(A a) {}
@Override
public String erroMsg(){}
},
CHK2 {
@Override
public boolean chkfnc(A a) {}
@Override
public String erroMsg(){}
};
CHK3 {
@Override
public boolean chkfnc(A a) {}
@Override
public String erroMsg(){}
};
public abstract boolean chkfnc(A a);
public abstract String errorMsg;
}
En utilisant l'exemple précédent
private void doProcess() {
A a = initial();
for (MyChecker val : MyChecker.values()) {
if (!val.chefnc) {
throw new XXXException(val.erroMsg);
}
}
}
Et l'intérieur de doProcess a été rafraîchi et la vue s'est améliorée. De plus, puisque la commande est garantie en utilisant Enum, c'est presque comme si vous vouliez garantir l'opération.
Il n'y avait pas beaucoup d'articles qui utilisaient les valeurs d'Enum en Java comme celui-ci, alors je l'ai écrit. La situation dans laquelle il peut être utilisé est limitée, mais si vous reconnaissez que enum garantit l'ordre, je pense que d'autres applications fonctionneront également.
Recommended Posts