@echocage

Как упростить примитивную тернарную логику?

есть простейшая логика внутри метода:
...
   if(!empty(anyFunc($var)))
       return anyFunc($var);
...

Как я могу избежать повторения кода и сделать элегантное, красивое выражение?
*Короткие тернарные операторы и вынесение функции в переменные не предлагать
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 4
delphinpro
@delphinpro Куратор тега PHP
frontend developer
function anyFunc($var): ?string {
  if (some_conditional) {
    return 'string';
  }
  return null;
}

// Использование
//...
  return anyFunc($var);
//...
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Во первых нафига здесь тег лары?
Во вторых - что вы ставите целью данного кода? return early? Тогда все норм и сокращать не надо.
В других случаях может быть что угодно, но никакой крамолы в приведенном коде вроде нет, или давайте более развернутый код для понимания проблемы.

Если смысл в сокращении количества вызовов, то
$res = anyFunc($var); if(!empty($res))return $res; или, как написал коротко iljaGolubev, if($ret= anyFunc($var)) return $ret;, но я предпочитаю разбивать присвоение и проверку в разных строках, для читаемости.
Ответ написан
if ($result = anyFunc($var)) {
  return $result;
}


$resultForFunc = anyFunc($var);
if (!empty($resultForFunc)) {
  return $resultForFunc
}


function anyFunc($var) {
// some code there
  if (!$result) {
    throw new Exception('result not builded');
  }
}

try {
  return anyFunc($var)
}
catch (\Exception $e) {
// log
}


метод сильно зависит от окружающего кода.
Ответ написан
Комментировать
@pantsarny
ваш вариант вызывает функцию дважды, думаю так не надо?
как насчет

return anyFunc($var) ?: null
Ответ написан
Ваш ответ на вопрос

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

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