網頁

2013年3月7日 星期四

函數的內在與長相

函數是一種功能,功能是去做一件事,多數狀況下(不是全部狀況),做一件事要有基本資訊才能做,例如,如果我說,我想吃大餐,基本資訊可能有到哪裡吃、吃些什麼、哪天去吃、跟誰共餐、預算上限...等。這些參與了我吃大餐這件事的基本資訊,在程式語言裡,稱為參數(parameter),一個函數,可以沒有任何參數,也可以不只一個。

請注意這個翻譯,參數,在表達上的有限性,參不一定是數字,如上例,到哪裡吃是文字,吃些什麼是文字,哪天去吃是日期、跟誰共餐是文字、預算上限則是數字。

做一件事,沒有任何參數的狀況雖不多見,但也不是全然沒有。例如我說我很累,現在就想小睡一下,我可以不說在哪裡睡、要睡多久,我就是想立即小睡一下,因為我很累,所以立刻就睡著了,這件事就也做完了,不須任何參數也可以做完。

當我們自己寫 Sub 時,就是在自己定義函數(當然,函數較嚴謹的定義並非如此,但可以先忽略)、自己打造一些該語言沒有的功能。一個程式語言,會先提供它認為多數程式設計師都用得到的基礎建設、基本零件,但卻不可能假設自己知道,世界上所有程式設計師會想設計些什麼程式,因此,到目前為止,沒有一個語言,會先提供好一個叫做 "憤怒鳥" 的暢銷手機遊戲程式,你必須自己寫。

還記得左右括弧嗎? 與 Sub 相同,函數的長相就是這樣:

Function <自己取的函數名稱>(參數 1, 參數 2, 參數 3...)
    (你要寫的程式碼在這裡)
    <自己取的函數名稱> = <某個結果>
End Function

當然,也可以沒有參數(只是不多見),就如同我們之前寫的程式那樣。

與 Sub 的結構一模一樣,只是名稱變成了 Function。

當你使用 Excel VBA 的內建函數時,也是一樣的長相:

left("公分", 1) ==> left 就是函數名稱,"公分" 與 1 就是參數。函數與 Sub 最大的不同點,在於函數有個 "傳回值",例如上述這個 left("公分", 1),傳回值就是 "公"。