如何編寫高質量的代碼四 - 代碼優化之loop

每一個程序都須要操做Loop, Loop看之簡單其實大有學問。這篇講講如何有效操做loop 函數

  • 具備分叉的循環(switched loop)

好比你想作以下操做 oop

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;
}
  •  能夠合成的循環

有時候其實兩個循環能夠徹底合併爲一個,好比以下代碼 spa

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;
}


 如何編寫高質量的代碼 .net

相關文章
相關標籤/搜索