Ho una funzione di controllo del valore, qualcosa di simile a una funzione di controllo del numero di carta di credito, che viene passata in una stringa e deve verificare che il valore sia del formato corretto.
Se è il formato giusto, è necessario restituire true.
Se non è il formato giusto, è necessario restituire false e anche dirci cosa c'è di sbagliato nel valore.
La domanda è: qual è il modo più bello per raggiungere questo obiettivo?
Ecco alcune soluzioni:
1. Utilizza i codici di ritorno intero / enum per indicare i significati:
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];
}
Questa soluzione non mi piace perché richiede l'implementazione dal lato del chiamante.
2. Crea una 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();
}
Questa soluzione è ordinata, ma sembra eccessivo / reinventare la ruota.
3. Usa le eccezioni.
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();
}
Sono tentato di usare questa soluzione, ma mi viene detto che non devi usare eccezioni per la logica di business.