三元条件结果的方法

Method on result of ternary condition

本文关键字:结果 方法 条件 三元      更新时间:2023-10-16

在三元条件后使用方法是不良样式吗?沿着:

的线
(node->parent()->left() == node ? node->parent()->left()
                                : node->parent()->right()).reset();

我知道代码样式可能是主观的,但我仍然希望我能得到一些建议,好像要使用它或写下:

if (node–>parent()–>left() == node) {
    node->parent()->left().reset()
} else {
    node–>parent()->right().reset()
}

(来自评论)关于:

auto& childUnq = node->parent()->left() == node ? node->parent()->left()
                                                : node->parent()->right();
childUnq.reset();

我强烈建议另一种选择:

auto& left = node->parent()->left();
auto& right = node->parent()->right();
auto& pick = (left==node) ? left : right;
pick.reset();

通过介绍简单的名称,很明显发生了什么。三元运营商本身并不糟糕,但是挑战是仅在简单的上下文中使用它。

我会说这确实是不好的样式。

以这种方式考虑一下,如果您在别人的代码中发现,您乍看之下可能无法说出它的作用。您肯定需要一些时间才能意识到Reset()函数首先存在,并且会影响条件的两个分支!

即使对您来说,它也可能导致您在调试时一些不必要的问题。

尽管三元操作员可以整洁地使用简单的东西,但要过度使用它,但不仅对您来说,还可以使您的代码非常困难阅读,甚至对他人而言。如果您在别人的代码中找到它,您是否愿意看到它?

if(node->parent()->left() == node){
    node->parent_->left_.reset();
} else {
    node->parent_->right_.reset();
}

,请保持尽可能清洁和清除!每个人都会感谢您!