成功軟件開發者的9種編程習慣
2024-07-21 02:11:31
供稿:網友
 
好的原程序做出好的軟件
  有些人會想:只要程序運行結果好,就不管原程序編得怎樣。但絕對不是這樣的。軟件不是一次性就作完的,有必要做修改,擴展等管理。所以原程序要盡量作成易看懂,管理方便。
  這樣做,第一是為了軟件開發者方便,其次還會影響到軟件的性能。管理不方便的程序不會作出好的軟件。
  希望通過這篇文章能學到好的編程習慣。要理解這文章的內容,你至少要懂得1個開發工具語言。這里舉例說明的都是c語言,但你對c語言沒有了解也不要擔心。這里說明的是原理而不是特定的語言。
1. 語句要結束得徹底---(分號;)
  程序員經常有的失誤之一是忘記在語句結束后加一個分號。這樣的問題點不易發現,時而讓程序員不知所措。編程時要時時注意每個語句是否以分號結束,雖然不是所有語言都以分號結束。下面有忘記點分號的例子。
int main(void)
{
  /* 沒有分號,導致問題*/ 
  printf("hello world!/n") 
  return(0);
}
  很多的人犯這樣的錯誤。不到幾條的程序是不難發現這樣的問題,但1000條以上的程序里呢?查找那忘記寫分號了的語句不會是很容易的事。記住,結束一條語句,一定要寫分號,如同一般文章結束后點句號一樣。 
  還有一種關于分號的失誤是不該寫分號的時候寫分號。有經驗的程序員看到下面例子會覺得好笑,但筆者確實看到了很多這樣的失誤。
/* main() 后面不該寫分號 */ 
int main(int argc, char *argv[]); 
{ 
  printf("hello world"); 
  return(0); 
} 
函數或method后面是不該寫分號的。
2. 要適合使用空格和tab鍵
  c語言是不分辨空格的,因此程序也可以不需要空格一直寫下去,但這樣的程序會是誰都看不懂的"很有難度"的程序,請看以下例子:
if(x==0) {a=b=c=d=max; x++;}
  這樣寫,也許會節省空間,但不僅別人,編程的本人也會很難看懂。程序要寫得容易看懂!
if(x == 0) 
{ 
  a = b = c = d = max; 
  x++;
} 
  這樣寫,看起來不很清楚嗎?程序要有確切的空格才容易看得懂。
3. 統一使用大括號和切斷方式
  每個程序員使用大括號({})和改行的方式都有自己的習慣,這樣,把程序移交給別人繼續做的時候,會出現混亂。比如象以下例子:
int main() 
{ 
  int x = 1; 
  int y = 10; 
  while(x < y ){ 
    printf("value of x is %d/n", x); 
   x++; 
  } 
} 
有些程序員會這樣寫大括號:
int main() 
{ 
  int x = 1; 
  int y = 10; 
  while(x < y )
  { 
    printf("value of x is %d/n", x); 
    x++; 
  } 
} 
  筆者是喜歡第二種方式。因為一段語句的開始和結束很明顯。我們不能要求每個程序員都用某一種方式來編程,但一個程序里一定要統一。還有,看別人編的程序時要想到他人編程的習慣也許與你不同。
4. 不亂用if語句
有些人很喜歡用“if”語句,如下:
if(a == 0) 
{ 
  a++; 
  return(a); 
} 
if(a == 1) 
{ 
  a += 5; 
  return(a); 
} 
if(a == 2) 
{ 
  a += 10; 
  return(a); 
} 
if(a == 3) 
{ 
  a += 20; 
  return(a); 
} 
if(a == 4) 
  exit(1);
  有沒有比這更好的辦法呢?else if語句?不是。好的方法是用“switch-case”語句來寫簡便的程序:
switch(a) 
{ 
  case 0: a++; 
    return(a); 
  case 1: a += 5; 
    return(a); 
  case 2: a += 10; 
    return(a); 
  case 3: a += 20; 
    return(a); 
  default: exit(1); 
}
  如果沒有與a一致的值,會執行default里定義的作業,上面的例子是要執行結束。
5. 不亂用程序切斷(block)
  很多人經常亂用程序切斷。使用三個以上的切斷是比較難以看懂的程序。請看下面例子:
int a = 10; 
int b = 20; 
int c = 30; 
int d = 40; 
if(a == 10) 
{ 
  a = a + d; 
  if(b == 20) 
  {
    b = b + a; 
    if(c != b) 
    { 
      c = c + 1; 
      if(d > (a + b)) 
        printf("made it all the way to the bottom!/n"); 
    } 
  } 
}
  這也許是夸張了,但確實有很多人真的這樣做。那如何寫得更好一點呢?一種方法是用函數來分寫:
void next(int a, int b, int c, int d) 
{ 
  if(c != b) 
  { 
    c = c + 1; 
    if(d > (a + b)) 
      printf("made it all the way to the bottom!/n"); 
  } 
} 
int main() 
{ 
  int a = 10; 
  int b = 20; 
  int c = 30; 
  int d = 40; 
  if(a == 10) 
  { 
    a = a + d; 
    if(b == 20) 
    { 
      b = b + a; 
      next(a, b, c, d);
    } 
  } 
return(0); 
}
  要這樣寫,也許會增加工作量,但程序編得結構化,容易看懂,而且如果函數做得更好,也可以在其他地方再使用。
6. 寫好注釋
  要養成寫注釋的習慣。特別是別人難以理解的程序或變量一定要注釋,一個月后,也許你自己也需要看那注釋呢。
int x = 100; 
int y = 1000; 
if(x < y) 
  a = 0; 
else 
  a = 1;
  你能知道上面的程序意味著什么?如果不知道變量x,y和a指的是什么,那么很難理解。讓我們給它標個注釋再看吧:
/* 
* 檢測損益的程序 
*/ 
int x = 100; 
/* x 是賣書的總額*/ 
int y = 1000 
/* y是做書本的費用*/ 
int a; 
/* 確認是否有贏利*/ 
/* 比較x和y: */ 
if(x < y) 
/* 1指損失 */ 
  a = 1; 
else 
/*0指贏利 */ 
  a = 0;
  這樣注釋,不懂c語言的人也會看懂各語句意味著什么,各變量指的是什么。寫注釋是好習慣,但不要什么都注釋。注釋是為了好理解,不是為了寫長編文章。
int profit = 1; 
/* 贏利等于1 ?? */ 
int loss = 0; 
/* 虧損等于 0 ?? */ 
/* 如果贏利等于1 */ 
if(profit == 1) 
  /* 打印出“得贏利啦”??*/ 
  printf("we made a profit!/n"); 
/* 如果不是 */ 
  else 
  /*打印出“我們虧損啦”*/ 
  printf("we made a loss!/n");
  這樣注釋是浪費時間。一般是定變量或變量值的時候需要注釋,還有說明程序的目的,使用某個函數,procedule等的時候也需要。
7. 起名要合理
  程序,變量,procedure,structure等名一定要跟它的內容聯系起來,變量不要起名如”x”,”y”,”z”
  也許你會說筆者在上面舉的例子里也用了x,y等,可筆者這樣做的理由是他不牽涉到其他程序,實際開發軟件的時候,筆者當然會使用有意義的變量名。請看下面例子:
void x(int a, int b) 
{ 
  int z; 
  z = a + b; 
  printf("z is %d/n", z); 
} 
  在這,我們可以知道x做什么,但不知道它意味著什么。a,b,z也一樣。讓我們稍微改過來再看吧:
void sum_of_ages(int jacks_age, int jills_age) 
{ 
  int total_age; 
  total_age = jacks_age + jills_age; 
  print("total_age is %d/n", total_age); 
} 
  雖然沒有注釋,但容易看出來要做什么。起名起得好,沒有注釋也可以。
8. 確認buffer
  要時時確認對設定的排列或變量的大小,以避免數據混亂或導致系統出問題。請看下面使用者輸入數據的例子: char city[10]; 
/* 為都市名稱的排列 */ 
printf("enter a city name: "); 
scanf("%s", city); 
printf("city is %s/n", city);
  在這里,都市名稱設定為10字(英文字)以內。如果使用者輸入10字以上的都市名稱會怎么樣呢?可以說程序失敗或覆蓋buffer里面的數據。不管怎樣,不要做冒險的事,你要檢查文字的長度:
char city[10]; 
/*為都市名稱的排列*/ 
printf("enter a city name: "); 
fgets(city, sizeof(city), stdin); 
printf("city is %s/n", city);
  上面已修改的程序是:如果使用者輸入10字以上的都市名,只接受buffer能接受的長度為止,其外的會不接受。
9. 絕對不相信使用者
  這是很重要的規律。千萬不要相信將要使用你的軟件的人,不要認為使用者會按你希望的方式來操作,反而把他們想成專門發現程序毛病的人。舉例說,上面的程序就是為了那些輸入都市名更長的的使用者而確認文字長度的。
  象c語言需要明確的數據形式的開發工具使用者,要記住確認輸入數據形式和程序數據形式是否一致,不然會出現問題。
磨刀不誤砍材工
  以上的編程習慣是為你自己的方便。實際編程之前,要多做準備(分析,設計)。雖然稍麻煩,但為了編出易懂整齊的程序,不要舍不得花時間準備,不然以后會需要更多的時間來修改,擴展你的程序的。
本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。