将常用表达式提取到变量中

时间:2012-10-07 13:05:01

标签: c++ coding-style

假设我有一个指向类对象JoeBloggs的指针,这样做更好吗

int value = Factorize( (JoeBloggs->GetNumber()*CalculateHeight(57,88)) )*JoeBloggs->GetSpeed();

int currentSpeed = JoeBloggs->GetSpeed();
int currentNumber = JoeBloggs->GetNumber();

int value = Factorise( (currentNumber*CalculateHeight(57,88)) )*currentSpeed;

我一直在使用顶级的,因为它太短了,但是有相当的 有几次,当我认为第二个导致更整洁的代码。我在尝试着 坚持一致的编码风格。

3 个答案:

答案 0 :(得分:0)

我建议你将指针传递给函数'Factorise'来计算结果 换句话说:封装。

答案 1 :(得分:0)

你不必保持一致。

坚持你的第二条规则当然不是一个好主意,因为它会让代码变得非常冗长。

但是你也不能强制执行第一条规则,因为表达式有时会变得足够复杂,所以你必须打破它们。如果您访问使用成员函数等检索的对象的成员,则尤其如此。但是,这可能是您在错误的位置进行工作的一个好兆头。

BTW还有其他规则可以通过命名来破坏代码。如果你为表达的第一部分命名,那么读者就会理解你到底在做什么 - 对于这个规则你的例子是完美的,因为我不知道你在做什么......

int calculatedheight = Factorize( (JoeBloggs->GetNumber()*CalculateHeight(57,88));
int value = calculatedheight*JoeBloggs->GetSpeed();

......同样的论点适用于value ..那是什么?这是一个完全没有意义的变量名。

我强烈推荐Martin Fowler关于重构的文章和书籍,它有很多例子可以告诉你如何以正确的方式做到这一点。我提到的规则称为Introduce Explaining Variable

答案 2 :(得分:0)

好的代码不是短代码。好的代码是可读的代码。代码的读取频率大约是写入的10倍。如果它是真实的商业应用程序,那么您将来会多次阅读此代码,您将不得不再次完全理解该代码的作用。从这个角度来看,哪个版本更容易为您和您的团队理解?