Это простой вопрос GOTO потока управления, ничего не о распределении ресурсов.
Существует два уровня проверки "хороших" данных. Если и только если он проходит первую проверку, мы выполняем вторую проверку. Если данные не проходят ни один из тестов, вместо этого мы используем значение по умолчанию.
Вторая проверка включает в себя несколько шагов с промежуточными данными, поэтому мы не можем просто поместить ее в состояние короткого замыкания ||
. Кроме того, если второй тест пройден, мы используем выходные данные второго теста вместо исходных данных.
Это внутренний цикл обработки в реальном времени, поэтому эффективность очень важна. Мы не хотим делать какие-либо вычисления более одного раза.
if (firstCheck(data)) {
result = analyze(data);
if (secondCheck(result)) {
use_result(result);
}
else {
goto FAIL;
}
}
else {
FAIL:
use_result(DEFAULT_VALUE);
}
Этот GOTO, кажется, удовлетворяет всем моим требованиям с максимальной эффективностью. Я могу придумать другие способы сделать это, но все они потребуют дополнительного хранилища или условных обозначений. Однако я с осторожностью отношусь к GOTO. Фактически, если я воспользуюсь этим, это будет первый раз, когда я использую GOTO. Так что, пожалуйста, помогите мне найти выход!