Я использовал троичный оператор для выполнения очень простого, условного действия. Это работало хорошо, но моя IDE (PHPStorm) сообщила об этом как об ошибке. Я получил ошибку:
'void' method 'performAction' result used
Код, который я использовал, это:
($this->doThis ? $class->performAction() : $class->performDifferentAction());
Ошибка в PHPStorm явно неверна; Я нигде не использую результат метода void. Я просто вызываю методы, и это работает, как и ожидалось. Я просто использовал троичный оператор в качестве сокращения для этого:
if($this->doThis)
{
$class->performAction();
}
else
{
$class->performDifferentAction();
}
Я думаю, что это выглядит как действительный вариант использования троичного оператора. Это не запутано, легко читается и коротко.
Тем не менее, это недостаток дизайна?
Тернарный оператор является выражение который возвращает результат. Его цель — использовать его, когда необходимо «встроенное условие», которое в противном случае потребовало бы создания одной или двух дополнительных переменных. Таким образом, всякий раз, когда вы используете троичный оператор, вы как бы ожидаете использовать его результат.
Например, вы не написали бы это, не так ли?
1 + 2; // result not used, does nothing
По сути, вы пишете такой код, но добавляете побочный эффект к нему:
1 + someFunc(); // soooo... does this do anything?
Поэтому ваша IDE настоятельно рекомендует вам явно написать код побочного эффекта, используя if..else
, Это более прямо выражает то, что вы там делаете.
Сказав все это, это в конечном итоге зависит от вас и вашего стиля. PhpStorm имеет свои предпочтения; если вы хотите переопределить их, отключите эту конкретную проверку. Тем не менее, эта проверка поможет вам написать лучший код; это предупредит вас, если вы действительно забыл назначить возвращаемое значение где-нибудь.
Других решений пока нет …