如何寫出好的程式碼:縮排、定義變數與型別還有註解!

大多數剛學程式的人寫出來的程式碼都會有幾個很明顯的缺點,就是程式碼通常沒有進行縮排,還有幾乎沒有註解,如果你一開始學的是VB6這種程式語言的話那你還會有一個缺點就是沒有定義變數名稱跟型別,這樣的程式碼可以是可以執行,但是在維護上卻很麻煩,另外這篇文章只是我自己的一點小見解,如果有說錯的地方望予指正

一.定義變數與型別的重要:

首先我來講定義變數與型別的重要性吧,這就要從VB說起了,一般初學者學的都是VB6,或是VB.NET,剛怎麼形容VB呢…. 其實他是一個很適合初學者的語言,可以讓初學者很快速的踏入程式語言的世界,也就是說他具有簡易性這項特質,然後因為VB具有簡易的特質,所以在某些方面他不能算很嚴謹,例如VB6不會強制你一定要去定義變數,沒有定義變數也可以直接使用,不只VB,像是PHP、Javascript都是如此,而到了VB.NET算是有些進步強制你要定義變數,可是他也沒有規定一定要定義型別,這會導致什麼後果呢?以VB6來講如果你沒有定義變數的型別,或是根本沒有定義變數的話,那系統會自動將該變數定義為Variant(VB.Net會將未定義的變數自動定義為Object),而Variant佔的記憶體大小是16位元組,16位元組聽起來沒什麼,畢竟現在記憶體隨便都是2G起跳,那我用相對的來講好了,請看下面兩組程式碼:

一.不定義型別

Dim x = 5
Dim y = 10
print( x + y)

二.定義型別

Dim x As Byte= 5
Dim y As Byte= 10
print( x + y)

上面兩組程式碼你最後都能拿到正確的結果:15,但是這是表象,實際上不定義型別的那組程式碼佔用了32位元組的記憶體量,而將變數定義為Byte的那組程式碼只佔用了2個位元組的記憶體量(我是純粹以變數型別來思考,不把其他東西算進去),是兩組程式碼一比較就差了16倍的記憶體用量,很恐怖吧~ 這就是適當選擇變數型別的好處,而且這是簡單的相加運算所以本來耗的記憶體就少,如果你寫的是大型的專案程式,比如開發一個瀏覽器,那麼變數是否有宣告就會成為瀏覽器效能的一個大的決定因子

關於VB中的變數可以到http://goo.gl/kwl3T

↑↑Byte只佔1個位元組

↓↓Object佔4個位元組,而VB6的Variant佔16個位元組

還有剛剛講的多佔記憶體還算是小的缺點,有的時候變數沒有宣告會導致程式碼很容易出錯,或是暗藏Bug,學過程式的人都知道變數型別有各自的特質,例如整數(Integer)只能儲存整數資料,而你如果把整數型別的變數拿來儲存小數的話系統會自動幫你進行處理,還有數字過大的話整數型別也會儲存不下,這時候就要用到Long這種容量比較大的型別,所以你如果現在寫了一個匯率換算程式,可是匯率的數字幾乎都是到小數點第二或第三位,這時候你用整數來進行運算,數字上頂多差1,但是算成匯率之後就會有小則數千,多則數萬甚至數百萬的差異,可以說型別與變數的定義不可不慎!

P.S.除了不強制你定義變數與型別這個缺點之外,VB還有很多缺點,但這篇文章用意不再攻擊VB,而是在講解不定義變數的危害,而且VB說真的是一個很適合新手的程式語言

二.程式碼縮排、註解的重要

有別於剛剛講的型別、變數的重要,接下來要講的程式碼縮排、註解做的好或不好都不會影響到程式能否執行,但卻會影響到你是否是一個合格的程式設計師,不把事情講的那麼遠,畢竟很多人學程式只是為了應付考試跟學業,這時候台北商業技術學院一位林老師講的畫就讓我忍不住想喊讚,他說:我們學校資管系的學生,如果寫出來的程式碼沒有縮排,我一定把它當掉,北商老師可能是比較明白也比較嚴的,但你信不信一般高中職的老師在看到沒有縮排的程式碼時,印象上就已經扣分很多了

前面那段一直在廢言說縮排、註解很重要,但是我都沒有實際解釋原因,現在這段就是要實際解釋啦~ 請先看下面兩段程式碼:

一.不進行縮排

If x > 2 Then
If x > 5 Then
Print("x>5")
End If
Print("5>x>2")
End If

二.有進行縮排

If x > 2 Then
	If x > 5 Then
		Print("x>5")
	End If
	Print("5>x>2")
End If

上面兩段程式碼當發生錯誤時,是第一種沒有縮排的容易找出錯誤的部份,還是第二種沒有縮排的容易找出錯誤部分?相信這點並不需要我來多說大家都能明白,而這就是縮排的重要性,讓你能快速的找出程式碼裡面有錯誤的部份,我發現其實蠻多同學的程式碼都寫的很亂,不去做縮排,然後發生錯誤時會一直請別人去幫忙看是哪裡錯,殊不知幫忙檢查錯誤的同學也很辛苦….. 眼睛很辛苦的說,所以為了自己也為了別人,把你的程式碼縮排好吧~

還有我剛在假造那段沒有縮排的程式碼時發現原來VS系列的IDE都會自動進行縮排,害我後來只好開記事本來作假的程式碼,雖然VS能幫你進行好縮排的工作,但是很可惜的高中階段大部分學校都是教VB6… 不會自動縮排,而且就算你的IDE會幫你進行縮排你也不能把它當作裡所當來,自己還是要有這種習慣才行

縮排的重要性講完了,總結而言就是方便除錯,還有讓程式碼的可讀性增加,而接者要說的註解也是一樣的功能,這時又要用到北商老師的一句話:你們以後出社會,大多數機會寫程式都不是寫一個全新的程式,而是要去修改別人寫好的程式. 這句話代表者什麼呢? 這時我又要在來那句口頭禪:有學過程式的都知道,一種功能往往可以用很多不同的程式碼做到,假設是要做等差級數,有人會用迴圈慢慢的去算,有人比較聰明會用公式去解,這時你的程式碼如果沒有註解,別人要看你的程式碼時就會很累,要看一段時間才能看懂你在幹嘛,更有甚者會有人看不懂你在寫什麼,或是不說別人看不懂,那段程式碼如果放個1~2年你在拿出來看,恐怕你自己都看不太懂你的想法吧?

前人種樹,後人乘涼,你現在多花半小時幫程式寫註解,等之後別人要用到你的程式碼時就可以省掉2小時、3小時甚至更多的時間,或是你自己要修改你自己的程式碼時也不用花太多時間先把原本的程式碼看懂才能繼續做下去,這種利人又利己的事情何樂而不為呢?

總結:

其實要要寫出好的程式碼,光上面講的那些還不足夠,但上面講的可以說是最基本的,如果連最基本的都做不到,那又何必去講更深入的呢? 等之後有時間我會在把我自己的一些心得分享出來,但說真的這些都是老生常談,很多人可能都聽過,卻不是所有人都能做到,因為成績上沒有要求他們一定要做到,在高中職階段程式課是屬於你有寫出來就謝天謝地了,很少人能像北商那樣:程式碼沒做排版就給你當掉,總要等到出社會被別人白眼時才知道要做好這些事…  這一切都是要靠經驗、歷練才能懂得

在〈如何寫出好的程式碼:縮排、定義變數與型別還有註解!〉中有 2 則留言

  1. 在Dev C++裡的Tab預設是非常長,而且不會自動對括號
    如果你懶的設定,可以用Notepad++或PsPad來寫程式碼,比較容易寫的整齊

發佈回覆給「Jeremy」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料