这是三元运算符的可接受用例吗?
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();
}
我认为这看起来像是三元运算符的有效用例。它没有混淆,易于阅读且简短。
这还是设计缺陷吗?
三元运算符是一个表达式,它return是一个结果。它的目的是在需要 "inline condition" 时使用,否则需要您创建一个或两个附加变量。因此,无论何时您使用三元运算符,您都应该使用它的结果。
例如,你不会这样写吧?
1 + 2; // result not used, does nothing
你实际上在做的是编写这样的代码,但添加了一个副作用:
1 + someFunc(); // soooo... does this do anything?
因此,您的 IDE 敦促您使用 if..else
明确编写副作用代码。它更直接地表达了你在那里做什么。
说了这么多,最终取决于您和您的风格。 PhpStorm 有它的偏好;如果您想覆盖它们,请关闭该特定检查。但是,该检查可以帮助您编写更好的代码;如果您 真的忘记了 在某处分配 return 值,它会警告您。
我正在使用三元运算符执行一个非常简单的条件操作。它运行良好,但我的 IDE (PHPStorm) 将其报告为错误。我得到的错误是:
'void' method 'performAction' result used
我使用的代码是这样的:
($this->doThis ? $class->performAction() : $class->performDifferentAction());
PHPStorm中的报错明显是错误的;我没有在任何地方使用 void 方法的结果。我只是调用方法,它按预期工作。我只是使用三元运算符作为这个的简写:
if($this->doThis)
{
$class->performAction();
}
else
{
$class->performDifferentAction();
}
我认为这看起来像是三元运算符的有效用例。它没有混淆,易于阅读且简短。
这还是设计缺陷吗?
三元运算符是一个表达式,它return是一个结果。它的目的是在需要 "inline condition" 时使用,否则需要您创建一个或两个附加变量。因此,无论何时您使用三元运算符,您都应该使用它的结果。
例如,你不会这样写吧?
1 + 2; // result not used, does nothing
你实际上在做的是编写这样的代码,但添加了一个副作用:
1 + someFunc(); // soooo... does this do anything?
因此,您的 IDE 敦促您使用 if..else
明确编写副作用代码。它更直接地表达了你在那里做什么。
说了这么多,最终取决于您和您的风格。 PhpStorm 有它的偏好;如果您想覆盖它们,请关闭该特定检查。但是,该检查可以帮助您编写更好的代码;如果您 真的忘记了 在某处分配 return 值,它会警告您。