bimka
@bimka
Осваиваю Питон

Как остановить выполнение вышестоящей функции?

Существует функция calculate(). При ее выполнении, она вызывает функцию checkNegativity().
Как в случае, если функция checkNegativity() возвращает значение остановить выполнение функции calculate()?

Этот код просто пример. Мне интересно, как быть когда у меня множество чекеров и я хочу их вынести в отдельные функции.

function checkNegativity($num) {
    if ($num < 0) {
        return "Значение отрицательное";
    }
}

function calculate($num) {
    checkNegativity($num) // Как работать с чекером?

    return "$num - положительное число";
}

print_r(calculate(-10));
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
@maksam07
Не знаю, что это вы делаете, но если очень нужно...

function checkNegativity($num) {
    if ($num < 0) {
        return "Значение отрицательное";
    }

    return False
}

function calculate($num) {
    $result = checkNegativity($num) // Как работать с чекером?
    if($result)
        return $result

    return "$num - положительное число";
}

print_r(calculate(-10));
Ответ написан
Lastor
@Lastor
В чем сила, брат? В ньютонах.
Остановить: return;

Если чекеров много и вы хотите знать какой из них остановил выполнение, то это можно сделать при помощи
конструкции match.
function calculate($num){
    return match (false) {
        isPositive($num) => 'Значение отрицательное',
        !isFignya($num) => 'Значение фигня',
        !isOtherFignya($num) => 'Значение другая фигня',
        default => '$num - положительное число'
    };
}

ЗЫ
В будущем, вероятно появятся чекеры, которые вызывают другие чекеры, тогда вам потребуется протаскивать ответы функций через всю иерархию. Это вызовет головную боль и раздражение. Тогда вы станете оборачивать родительскую функцию в блок
try{
    //пробуем выполнить
    calculate($num);
}catch(MyCustomException $e){
    //если не получилось, смотрим причину в $e и решаем что делать.
}
, а останавливать чекеры при помощи throw new MyCustomException()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы