Eu tenho uma função de verificação de valor, algo semelhante a uma função de verificação de número de cartão de crédito, que é passada em uma string e precisa verificar se o valor está no formato correto.
Se é o formato certo, ele precisa retornar true.
Se não for o formato correto, ele precisará retornar false e também nos informar o que há de errado com o valor.
A questão é: qual é a melhor maneira de conseguir isso?
Aqui estão algumas soluções:
1. Use códigos de retorno inteiro / enum para significar significados:
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];
}
Não gosto dessa solução, pois requer implementação no lado do chamador.
2. Crie uma 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();
}
Esta solução é arrumada, mas parece exagerar / reinventar a roda.
3. Use exceções.
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();
}
Estou tentado a usar esta solução, mas me disseram que você não deve usar exceções para a lógica de negócios.