这是三元运算符可接受的用例吗?


Is this an acceptable use case of the ternary operator?

我正在使用三元运算符来执行一个非常简单的条件操作。它运行良好,但我的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有它的偏好;如果要覆盖它们,请关闭该特定检查。但是,该检查可以帮助您编写更好的代码;如果您真的忘记在某处分配返回值,它会警告您。