如何编写高质量的代码四 - 代码优化之loop

每个程序都需要操作Loop, Loop看之简单其实大有学问。这篇讲讲如何有效操作loop

  • 具有分叉的循环(switched loop)

比如你想做如下操作

for ( i = 0; i < count; i++ ) {
   if ( sum_type == SUMTYPE_NET ) {
      net_sum = net_sum + amount[ i ];
   }
   else {
      gross_sum = gross_sum + amount[ i ];
   }
}

这段代码里面有个判断语句(if sum_type == SUMTYPE_NET)执行力count次,其实降低了软件的速度,你大可以重写一下从而提高速度。

if ( sum_type == SUMTYPE_NET ) {
   for ( i = 0; i < count; i++ ) {
      net_sum = net_sum + amount[ i ];
   }
}
else {
   for ( i = 0; i < count; i++ ) {
      gross_sum = gross_sum + amount[ i ];
   }
}
可以继续优化代码,你可以把for() 循环的代码放到一个函数里面,提高阅读能力.

if (sum_type == SUMTYPE_NET ) {
  net_sum += get_sum(amount, count);
}
else {
  gross_sum += get_sum(amount, count);
}

int get_sum(amount[], int count)
{
  int sum = 0;
  for ( int i = 0; i < count; i++ ) {
      sum = sum + amount[ i ];
   }
   return sum;
}
  •  可以合成的循环

有时候其实两个循环可以完全合并为一个,比如如下代码

for (int i = 0; i < employee_count; i++)
{
   employee[i].name = "";
} 
...
for ( int i = 0; i < employee_count; i++)
{
   employee[i].earning = 0;
}
代码完全可以合并为如下代码,节省了N个循环


for ( int i = 0; i < employee_count; i++)
{
  employee[i].name = "";
  employee[i].earning = 0;
}
  • 尽量简化循环内的代码逻辑
for ( i = 0; i < rate_count; i++ ) {
   net_rate[ i ] = base_rate[ i ] * rates->discounts->factors->net;
}
这是一段正确的代码,但是有点难以理解,在这种情况下,我们可以通过交换(临时变量)来提高代码的阅读性。
quantity_discount = rates->discounts->factors->net;
for ( i = 0; i < rate_count; i++ ) {
   net_rate[ i ] = base_rate[ i ] * quantity_discount;
}


 如何编写高质量的代码



你可能感兴趣的:(如何编写高质量的代码四 - 代码优化之loop)