0

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

我一直在使用第一个,因为它要短得多,但是有很多次我认为第二个会产生更整洁的代码。我试图坚持一种一致的编码风格。

4

3 回答 3

0

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

于 2012-10-20T23:28:08.580 回答
0

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

于 2012-10-07T13:11:32.690 回答
0

你不必保持一致。

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

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

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

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

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

我强烈推荐 Martin Fowler 的有关重构的文章和书籍,其中有大量示例向您展示如何以正确的方式做到这一点。我提到的规则称为Introduce Explaining Variable

于 2012-10-07T13:32:09.943 回答