为什么foo-> bar-> foobar被认为是不好的风格?以及如何避免不添加代码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

return edge->terminal->outgoing_edges[0];

宁愿:

Node* terminal = edge->terminal;
return terminal->outgoing_edges[0];
  1. 为什么这被认为是不好的风格?
  2. 我怎样才能重构我的程序,以避免'坏风格',但也避免了根据上述建议创建的额外代码行?
提问于
用户回答回答于

你应该问你的教授他为什么认为它是不好的风格。我不。但是,我认为他在终端声明中忽略了const是一种坏风格。

对于这样的一个片段,这可能不是一个坏的风格。不过考虑一下:

void somefunc(Edge *edge)
{
   if (edge->terminal->outgoing_edges.size() > 5)
   {
        edge->terminal->outgoing_edges.rezize(10);
        edge->terminal->counter = 5;
   }
   ++edge->terminal->another_value;
}

这开始变得笨拙 - 很难阅读,很难写(我输入时犯了大约10个拼写错误)。这需要对操作员进行大量的评估 - >对这两个类进行评估。如果运营商是微不足道的,但如果运营商做出了令人兴奋的事情,那么最终它会做很多工作。

所以有两个可能的答案:

  1. Maintanability
  2. 效率

而像这样一个片段,你无法避免多余的线。在上面这样的事情中,它会导致更少的输入。

用户回答回答于

class Edge { private: Node* terminal; public: Edges* outgoing_edges() { return terminal->outgoing_edges; } }

现在,您可以outgoing_edges在一个地方更改实施,而无需到处更改。说实话,在数据结构如图的情况下,我并不真正购买它(它是紧密耦合的,边缘和节点不能互相逃脱)。这在我的书中是过分抽象的。

在表达式中a->b->c,还有空解除引用问题,如果b是null ,该怎么办?

所属标签

可能回答问题的人

  • 最爱开车啦

    8 粉丝503 提问6 回答
  • 优惠活动秘书

    0 粉丝2 提问6 回答
  • 天使的炫翼

    17 粉丝531 提问6 回答
  • Richel

    6 粉丝0 提问5 回答

扫码关注云+社区

领取腾讯云代金券