文章目錄
第四章 函數
很多人到現在還分不清楚什麼是函數,什麼是方法,非常之困惑。其實,這兩種概念是換湯不換藥,講到都是同一種東西。方法是物件導向的產物,比如,我們說使用某的對象的某個方法;函數是面向過程的產物,比如,我們經常會說執行某個函數。不管是函數還是方法,它們的寫法都是一樣的。本章將向大家詳細介紹函數的相關概念。
本章的學習重點:
◆ 函數名的設計
◆ 函數參數的設計
4.4使用函數注意事項
函數是使用C#語言編寫程式的準系統單元,其重要性不言而喻。函數設計的細微缺點很容易導致該函數被錯用,所以光使函數的功能正確是不夠的。本節重點論述函數的設計和實現的一些規則,希望對大家有所協助。
4.4.1函數名的設計
我們都知道,不論在什麼編程設計語言裡函數都是一個非常重要的概念。對與大多數初學者來說,函數名設計的不充分,會導致在後來的函數調用中,尤其是項目規模越來越大的時候,都分不清楚各個函數的作用和差別。對函數的調用和操作帶來不必要的麻煩。充分理解函數名的作用在程式設計中的作用也顯得由為重要。
鑒於大多數名稱都是通過串連若干單詞構造的,請使用大小寫混合的格式以簡化它們的閱讀。下面先向大家介紹常用的幾種大小方式:
1、匈牙利命名法:由微軟的一位匈牙利程式員提出,在Windows編程中使用非常普遍。匈牙利命名法通過在變數名前面加上相應的小寫字母的符號標識作為首碼,標識出變數的範圍、類型等。例如,int_Age定義了一個表示年齡的變數。目前這種方法在C#語言中很少使用了,因為使用Visual Studio開發工具已經相當方便,可以很方便知道變數的範圍或者類型等相關資訊。
2、Camel命名法:中文翻譯為駱駝式命名法,原因是採用該命名法的名稱看起來就像駱駝的駝峰一樣高低起伏。書寫規則是除了第一個單詞外每個單詞的第一個字母都是大寫的。Camel命名法有兩種形式:混合使用大小寫字母和單詞之間加底線。
例如:userId或者user_Id都屬於Camel命名法。
3、Pascal命名法:與Camel命名法類似,不過Pascal命名法的首字母都為大寫字母。
例如:UserId
現在我們已經熟悉了上面這3中常用的命名方式,在設計函數的時候,我們一般使用Pascal命名法來命名函數名稱。這是一種書寫規範,並不會對程式效能造成什麼影響,只是大家都使用同樣一種風格書寫對於代碼的閱讀帶來很大的方便。例如:Console.WriteLine()。WriteLine方法使用了Pascal命名方式,每個單詞的首字母(W和L)都為大寫字母。
我們都知道命名是最有影響力的協助。除了大小寫外,方法的命名,一般將其命名為動賓短語,表示“做什麼”的意思。
例如:
public class File
{
public void CreateFile(string filePath)
{…}
public void GetPath(string path)
{…}
}
CreateFile方法使用Create動詞作為開始,然後使用File作為賓語。千萬不要寫成了FileCreate()。
作者心得:
一個方法如果是用來判斷使用的,其傳回值一般是true或者false。我們可以在方法名中包含Is,這意味著Yes/No或True/False值。例如IsExists。
4.4.2函數參數的設計
參數是函數的重要組成部分,本節將重點介紹函數參數的設計問題。雖然看上去,參數只是用來傳遞數值,工作不是太複雜,但是參數設計欠佳往往會給函數調用者帶來很多不便,隨著項目規模越來越大,開發難度和複雜度都會大大的增加,函數設計問題就會越來越明顯。
1、 參數命名
首先,我們來說說參數的命名,對於函數來說,參數就像是一個局部變數,因為它遵循局部變數的所有法則。在命名時,參數使用camel方式的大小寫,並且使用具有描述性的,有明確意義的名稱。
例如:
public void GetMessageById(int messageId)
{……}
清晰的參數命名,可以節省大量查閱資料的時間。在使用C#開發代碼時,可以使用Visual Studio編輯器的智能提示功能,自動提示參數的類型與名稱,非常的方便,調用者只要看著參數列表就可以正確的使用這個函數了。
2、 不要使用保留項
我們在設計類庫函數的時候,都會在能夠預見到改變的函數參數中添加保留項。這種做法在C++語言中非常常見。比如新版本的函數一但需要增加新的參數就不得不另外命名為GetMessageEx或者GetMessage2之類的名稱。但是,自從C#語言有了重載函數功能後,我們可以完全放棄這種做法,新版本的函數依然可以繼續使用原來的函數名稱而不需要改變。
3、參數的順序
參數的順序並不會造成程式運行時的實際差別,但總的說來,總是習慣於將核心資料放在前面,然後是相關的設定參數、選項、功能開關等,並將相關的參數靠在一起,儘可能地符合人的閱讀和思維習慣。
4、重載函數的參數一致
從文法上來說,參數差異是函數各個重載之間的最本質的區別。然而,事實上參數在各個重載之間的差異往往很小,因此保持其一致性是非常重要的。重載函數的參數一致性主要體現在兩個方面:名稱的一致性和順序的一致性。
就是說,如果同一個參數在多個重載版本中都存在,那麼其出現在每個重載中的參數名稱都應當是完全一致的。在名稱一致性的基礎上,函數不同重載之間,同一個參數在參數列表的相對位置應該不變。
例如:
public static FileStream File.Create(string path);
public static FileStream File.Create(string path, int bufferSize);
public static FileStream File.Create(string path,int bufferSize,FileOptions options);
可以看到,不同的重載只應在真正有所區別的參數上出現形式上的變化,如果兩個參數表示的是同樣的含義,那麼就精確地使用相同的名稱和相同的順序。