J'ai une fonction de vérification de valeur, quelque chose comme une fonction de vérification de numéro de carte de crédit, qui est passée dans une chaîne et doit vérifier que la valeur est au bon format.
Si c'est le bon format, il doit retourner vrai.
Si ce n'est pas le bon format, il doit retourner false, et nous dire également ce qui ne va pas avec la valeur.
La question est, quelle est la meilleure façon d'y parvenir?
Voici quelques solutions:
1. Utilisez des codes de retour entiers / énumérés pour signifier les significations:
String[] returnCodeLookup =
[
"Value contains wrong number of characters, should contain 10 characters",
"Value should end with 1",
"Value should be a multiple of 3"
]
private int valueChecker(String value)
{
/*check value*/
return returnCode;
}
rc = checkValue(valueToBeChecked);
if rc == 0
{
/*continue as normal*/
}
else
{
print("Invalid value format: ") + returnCodeLookup[rc];
}
Je n'aime pas cette solution car elle nécessite une implémentation côté appelant.
2. Créez une classe returnCode
Class ReturnCode()
{
private boolean success;
private String message;
public boolean getSuccess()
{
return this.success;
}
public String getMessage()
{
return this.message;
}
}
private ReturnCode valueChecker(String value)
{
/*check value*/
return returnCode;
}
rc = checkValue(valueToBeChecked);
if rc.getSuccess()
{
/*continue as normal*/
}
else
{
print("Invalid value format: ") + rc.getMessage();
}
Cette solution est bien rangée, mais il semble que ce soit exagéré / réinventer la roue.
3. Utilisez des exceptions.
private boolean valueChecker(String value)
{
if int(value)%3 != 0 throw InvalidFormatException("Value should be a multiple of 3";
/*etc*/
return True;
}
try {
rc = checkValue(valueToBeChecked);
}
catch (InvalidFormatException e)
{
print e.toString();
}
Je suis tenté d'utiliser cette solution, mais on me dit que vous ne devez pas utiliser d'exceptions pour la logique métier.