天天看點

設計模式——代碼的規範

在開始寫這篇文章之前,先給大家看兩段代碼:

第一段:

Console.Write("請輸入數字A:");
            string A = Console.ReadLine();
            Console.Write("請選擇運算符号(+、-、*、/)");
            string B = Console.ReadLine();
            Console.Write("請輸入數字C:");
            string C = Console.ReadLine();
            string D = "";

            if (B == "+")
                D = Convert.ToString(Convert.ToDouble(A) + Convert.ToDouble(C));
            if (B == "-")
                D = Convert.ToString(Convert.ToDouble(A) - Convert.ToDouble(C));
            if (B == "*")
                D = Convert.ToString(Convert.ToDouble(A) * Convert.ToDouble(C));
            if (B == "/")
                D = Convert.ToString(Convert.ToDouble(A) / Convert.ToDouble(C));
            Console.WriteLine("結果是:" + D);
           

第二段:

try
            {
                Console.Write("請輸入數字A:");
                string strNumberA = Console.ReadLine();
                Console.Write("請選擇運算符号(+、-、*、/):");
                string strOperate = Console.ReadLine();
                Console.Write("請輸入數字B:");
                string strNumberB = Console.ReadLine();
                string strResult = "";
                switch (strOperate)
                {
                    case "+":
                        strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB));
                        break;
                    case "-":
                        strResult = Convert.ToString(Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB));
                        break;
                    case "*":
                        strResult = Convert.ToString(Convert.ToDouble(strNumberA) * Convert.ToDouble(strNumberB));
                        break;
                    case "/":
                        if (strNumberB != "0")
                            strResult = Convert.ToString(Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB));
                        else
                            strResult = "除數不能為0";
                        break;
                }
                Console.WriteLine("" + strResult);
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("" + ex.Message);
            }
           

大家看完上面的兩段代碼有什麼感覺呢?

稍有一些經驗的大神們一眼就會看出:第一段代碼的命名不合規範,而且會做無用功,還沒有考慮到C為0的情況;第二段代碼雖然能夠較好的實作這個程式設計,但是沒有很好的運用到面向對象的概念。

現在,進入這篇文章的主題——代碼的規範。

       先說一下為什麼要把代碼寫規範

       1) 有一個好的代碼可讀性;使得你讀别人的代碼和别人讀你的代碼一樣容易;

       2)避免壞的代碼習慣,規範的代碼不容易引進bug,而且易于維護; 

       3)有一緻的代碼風格,看上去所有的代碼就象一個人寫的;

       4)以“程式結構和可讀性第一,優化第二”為宗旨。

       然後是命名的規範

        如上面第二段代碼(strNumberA )所示:str代表的是變量A的資料類型是string,NumberA是數字A的名字,這兩個合在一起構成了數字A的名稱,能夠使人一眼就能夠更加直覺地看出A是一個什麼東西,減少了溝通的障礙,使得代碼更容易了解。

        其實,代碼的編寫也是有一定的規則的:

         1)直覺命名函數、變量、宏、常量,讓它們表示它們的意思 ,避免名字太短或太長,3<名字長度<40;

         2)在變量、結構、函數名中,第一個單詞盡量用可以反映變量類型的單詞,其餘所有的單詞除了第一個單詞以

               外第一個字母将用大寫; 

         3)類型定義(typedef)、宏(macro)、常量(constant)所有字母必須大寫,單詞連接配接用下劃線;

         4)避免定義索引用數字,建議用集合定義; 

         5)避免用臨時變量,象I, ii , tmpBuf , 除了在一個局部有效,當局部外要 命名特别變量;

         6)避免定義索引用數字,建議用集合定義;  避免用臨時變量,象I, ii , tmpBuf , 除了在一個局部有效,當局部

              外要命名特别變量;

          7)避免同一塊程式不同僚物命名相似;

          8)避免不同部分、不同共用全局對象(類型、變量、宏)用相同名;

          9)建議用“g”或“g_”作為全局變量字首,“m”或“m_”作為成員字首(c++) 或靜态變量字首(c),如果你願

               意,可以參閱匈牙利命名規則。

         在程式設計當中也是有一定規則的

         1) 不要将多個語句放在同一行上

         2) 使用行接續符

         3) 縮進後續行

         4) 運用語句縮進來顯示代碼的組織結構

         5) 對子產品的D e c l a r a t i o n s部分中的代碼進行縮進,顯示其從屬關系

         6) 使用白空間将相關語句組合在一起

以上這些是我根據米老師的講課和百度總結出來的,都是程式設計人員必須知道的事情,隻有做好了這些才能成為一個優秀的軟體程式設計人員。

繼續閱讀