好的原程式做出好的軟體
有些人會想:只要程式執行結果好,就不管原程式編得怎樣。但絕對不是這樣的。軟體不是一次性就作完的,有必要做修改,擴充套件等管理。所以原程式要盡量作成易看懂,管理方便。
這樣做,第一是為了軟體開發者方便,其次還會影響到軟體的效能。管理不方便的程式不會作出好的軟體。
希望通過這篇文章能學到好的程式設計習慣。要理解這文章的內容,你至少要懂得1個開發工具語言。這裡舉例說明的都是c語言,但你對c語言沒有了解也不要擔心。這裡說明的是原理而不是特定的語言。
1. 語句要結束得徹底---(分號;)
程式設計師經常有的失誤之一是忘記在語句結束後加乙個分號。這樣的問題點不易發現,時而讓程式設計師不知所措。程式設計時要時時注意每個語句是否以分號結束,雖然不是所有語言都以分號結束。下面有忘記點分
號的例子。
int main(void)
很多的人犯這樣的錯誤。不到幾條的程式是不難發現這樣的問題,但1000條以上的程式裡呢?查詢那忘記寫分號了的語句不會是很容易的事。記住,結束一條語句,一定要寫分號,如同一般文章結束後點句號一樣。
還有一種關於分號的失誤是不該寫分號的時候寫分號。有經驗的程式設計師看到下面例子會覺得好笑,但筆者確實看到了很多這樣的失誤。
/* main() 後面不該寫分號 */
int main(int argc, char *argv);
函式或method後面是不該寫分號的.
2. 要適合使用空格和tab鍵
c語言是不分辨空格的,因此程式也可以不需要空格一直寫下去,但這樣的程式會是誰都看不懂的"很有難度"的程式,請看以下例子:
if(x==0)
這樣寫,也許會節省空間,但不僅別人,程式設計的本人也會很難看懂。程式要寫得容易看懂!
if(x == 0)
這樣寫,看起來不很清楚嗎?程式要有確切的空格才容易看得懂。
3. 統一使用大括號和切斷方式
每個程式設計師使用大括號({})和改行的方式都有自己的習慣,這樣,把程式移交給別人繼續做的時候,會出現混亂。比如象以下例子:
int main() }
有些程式設計師會這樣寫大括號:
int main() }
筆者是喜歡第二種方式。因為一段語句的開始和結束很明顯。我們不能要求每個程式設計師都用某一種方式來程式設計,但乙個程式裡一定要統一。還有,看別人編的程式時要想到他人程式設計的習慣也許與你不同。
4. 不亂用if語句
有些人很喜歡用「if」語句,如下:
if(a == 0)
if(a == 1)
if(a == 2)
if(a == 3)
if(a == 4)
exit(1);
有沒有比這更好的辦法呢?else if語句?不是。好的方法是用「switch-case」語句來寫簡便的程式:
switch(a)
如果沒有與a一致的值,會執行default裡定義的作業,上面的例子是要執行結束。
5. 不亂用程式切斷(block)
很多人經常亂用程式切斷。使用三個以上的切斷是比較難以看懂的程式。請看下面例子:
int a = 10;
int b = 20;
int c = 30;
int d = 40;
if(a == 10) }
}這也許是誇張了,但確實有很多人真的這樣做。那如何寫得更好一點呢?一種方法是用函式來分寫:
void next(int a, int b, int c, int d) }
int main() }
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)
在這,我們可以知道x做什麼,但不知道它意味著什麼。a,b,z也一樣。讓我們稍微改過來再看吧:
void sum_of_ages(int jacks_age, int jills_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語言需要明確的資料形式的開發工具使用者,要記住確認輸入資料形式和程式資料形式是否一致,不然會出現問題。
磨刀不誤砍材工
以上的程式設計習慣是為你自己的方便。實際程式設計之前,要多做準備(分析,設計)。雖然稍麻煩,但為了編出易懂整齊的程式,不要捨不得花時間準備,不然以後會需要更多的時間來修改,擴充套件你的程式的。
React開發實踐 如何做出好用的Switch元件
前言 手勢檢測 我們對move事件的要求非常簡單,就是每當手指在 dom 內移動時,就把手指劃過的相對距離告知 假設手指從 x1,y1 點滑到 x2,y2 點,那麼手指在兩點間滑動的x軸相對距離就是 x2 x1 y軸相對距離 y2 y1。所以,只要我們能夠獲取手指的座標位置,就能算出手指每次移動的相...
手把手教你做出好看的文字輸入框
首先我們看一下最後的效果圖 其實這個樣式很簡單,用到了css的偽元素focus。下面我們一起來重新做乙個吧。首先我們需要在你的頁面上新增乙個文字框 如下 這個是我們最平常的按鈕了,沒有任何的樣式。現在我們來新增我們好看的樣式,如下 mytxt 好了我們新增了樣式以後,我們需要在文字框中引用此樣式。修...
推薦的好軟體
1 notepad 如果對目前的編輯器厭倦的話不妨試試notepad 好處 1 開源 2 功能強大,支援幾乎能見到的所有程式語言關鍵字高亮顯示和分段,特別象python這樣的語言又沒有個好的編輯器。還有verilog等支援得很好。3 功能強大。很靈活。當然對應設定選項也很多,要仔細琢磨。4 可以設定...