У меня есть функция проверки значения, что-то очень похожее на функцию проверки номера кредитной карты, которая передается в строке и должна проверить, что значение имеет правильный формат.
Если это правильный формат, он должен вернуть true.
Если это неправильный формат, он должен вернуть false, а также сообщить нам, что не так со значением.
Вопрос в том, как лучше всего этого добиться?
Вот несколько решений:
1. Используйте целочисленные / enum коды возврата для обозначения значений:
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];
}
Мне не нравится это решение, так как оно требует реализации на стороне вызывающего.
2. Создайте класс 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();
}
Это решение опрятно, но кажется, что это перебор / переизобретение колеса.
3. Используйте исключения.
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();
}
Я испытываю желание использовать это решение, но мне сказали, что вы не должны использовать исключения для бизнес-логики.