三元条件结果的方法
Method on result of ternary condition
在三元条件的结果中使用方法是否被认为是不好的风格?
大致如下:
(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();
我会说这确实是一种糟糕的风格。
这样想,如果你在别人的代码中找到它,你可能第一眼看不出来它是干什么的。您肯定会花一些时间甚至首先意识到 reset() 函数就在那里,并且它会影响条件的两个分支!
即使对你来说,它也可能在调试时给你带来一些不必要的问题。
虽然三元运算符对于简单的东西可能很简洁,但过度使用它会使您的代码极难阅读,不仅对您如此,对其他人而言更是如此。
如果您在别人的代码中发现它,您不想看到它吗?
if(node->parent()->left() == node){
node->parent_->left_.reset();
} else {
node->parent_->right_.reset();
}
所以请尽可能保持干净和清晰!每个人都会感谢你!
我强烈推荐另一种选择:
auto& left = node->parent()->left();
auto& right = node->parent()->right();
auto& pick = (left==node) ? left : right;
pick.reset();
通过引入简单的名称,很清楚发生了什么。三元运算符本身并不坏,但挑战在于仅在简单的上下文中使用它。
在三元条件的结果中使用方法是否被认为是不好的风格? 大致如下:
(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();
我会说这确实是一种糟糕的风格。
这样想,如果你在别人的代码中找到它,你可能第一眼看不出来它是干什么的。您肯定会花一些时间甚至首先意识到 reset() 函数就在那里,并且它会影响条件的两个分支!
即使对你来说,它也可能在调试时给你带来一些不必要的问题。
虽然三元运算符对于简单的东西可能很简洁,但过度使用它会使您的代码极难阅读,不仅对您如此,对其他人而言更是如此。 如果您在别人的代码中发现它,您不想看到它吗?
if(node->parent()->left() == node){
node->parent_->left_.reset();
} else {
node->parent_->right_.reset();
}
所以请尽可能保持干净和清晰!每个人都会感谢你!
我强烈推荐另一种选择:
auto& left = node->parent()->left();
auto& right = node->parent()->right();
auto& pick = (left==node) ? left : right;
pick.reset();
通过引入简单的名称,很清楚发生了什么。三元运算符本身并不坏,但挑战在于仅在简单的上下文中使用它。