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

Extracting common expressions into variables

本文关键字:变量 提取 常用 表达式      更新时间:2023-10-16

假设我有一个指向类对象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;

我一直在用最上面的,因为它短得多,但有很多有几次,当我认为第二个会产生更整洁的代码时。我正在努力坚持一种一致的编码风格。

我建议您将指针传递给计算结果的函数"Factorise">
换句话说:封装。

您不必保持一致。

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

但你也不能强制执行第一条规则,因为表达式有时会变得足够复杂,所以你必须打破它们。如果你访问了一个用成员函数等检索到的对象的成员,这一点尤其正确。但话说回来,这可能是一个好迹象,表明你在错误的地方做了工作。

顺便说一句,还有其他规则可以通过命名将代码分解为多个部分。如果你给你表达的第一部分起个名字,那么读者就会明白你到底在做什么——因为这个规则,你的例子是完美的,因为我不知道你在做什么。。。

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

对于CCD_ 2也是如此。。那是什么?这是一个完全没有意义的变量名。

我强烈推荐Martin Fowler关于重构的文章和书,其中有大量的例子向您展示了如何以正确的方式进行重构。我提到的规则叫做引入解释变量。

好的代码不是短代码。好的代码就是可读的代码。代码被读取的频率大约是写入的10倍。如果它是一个现实生活中的商业应用程序,那么您将在未来多次阅读此代码,并且必须再次完全理解该代码的作用。从这个角度来看,您和您的团队更容易理解哪个版本?