造夢西游3代碼怎么用 代碼怎么用

在軟件中隨處可見命名:要給變量、函數、參數、類和封包命名,還要給源代碼及源代碼所在目錄命名,甚至還有jar文件、war文件和ear文件命名 。
但是,看似簡單的命名,也是讓不少程序員頭疼的問題 。有一些小伙伴,在進行變量命名的時候,對于自己熟悉的英文,可能還會用英文命名一下,如果需要命名的部分不會用英文表達,或許就直接用拼音了 。
有的童鞋一下想不起來怎么命名,直接用拼音直接用aa,bb等這樣沒有任何代表意義的字母來命名,可讀性非常差,可能自己今天寫的,一個星期后回來再看,也忘記其具體代表的含義了 。
因此,許多人在寫代碼之前,總會在想啊想啊,用什么命名法好呢?對于經常在C++、Java、Python等主流語言上切換的強迫癥來說,換個語言換種命名風格簡直不要太混亂 。

造夢西游3代碼怎么用  代碼怎么用

文章插圖

既然有這么多命名要做,不妨做好它 。本期內容中,異步君為大家帶來了起個好名字應遵從的幾條簡單規則,一起來看看吧
— 01 —
名副其實
名副其實說起來簡單 。我們想要強調,這事很嚴肅 。選個好名字要花時間,但省下來的時間比花掉的多 。注意命名,而且一旦發現有更好的名稱,就換掉舊的 。這么做,讀你代碼的人(包括你自己)都會更開心 。
變量、函數或類的名稱應該已經答復了所有的大問題 。它該告訴你,它為什么會存在,它做什么事,應該怎么用 。如果名稱需要注釋來補充,那就不算是名副其實 。
int d;// elapsed time in days
名稱d什么也沒說明 。它沒有引起讀者對時間消逝的感覺,更別說以日計了 。我們應該選擇指明了計量對象和計量單位的名稱:
int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;
選擇體現本意的名稱能讓人更容易理解和修改代碼 。下列代碼的目的何在?
public List<int[]> getThem() {List<int[]> list1 = new ArrayList<int[]>();for (int[] x : theList)if (x[0] == 4)list1.add(x);return list1;}
為什么難以說明上述代碼要做什么事?里面并沒有復雜的表達式,空格和縮進中規中矩,只用到三個變量和兩個常量,甚至沒有涉及任何其他類或多態 ***,只是(或者看起來是)一個數組的列表而已 。
問題不在于代碼的簡潔度,而在于代碼的模糊度:即上下文在代碼中未被明確體現的程度 。上述代碼要求我們了解類似以下問題的答案:
(1)theList中是什么類型的東西?
(2)theList零下標條目的意義是什么?
(3)值4的意義是什么?
(4)我怎么使用返回的列表?
問題的答案沒體現在代碼段中,可代碼段就是它們該在的地方 。比方說,我們在開發一種掃雷游戲,我們發現,盤面是名為theList的單元格列表,那就將其名稱改為gameBoard 。
盤面上每個單元格都用一個簡單數組表示 。我們還發現,零下標條目是一種狀態值,而該種狀態值為4表示“已標記” 。只要改為有意義的名稱,代碼就會得到相當程度的改進:
public List<int[]> getFlaggedCells(){List<int[]> flaggedCells = new ArrayList<int[]>();for (int[] cell : gameBoard)if (cell[STATUS_VALUE] == FLAGGED)flaggedCells.add(cell);return flaggedCells;}
注意,代碼的簡潔性并未被觸及 。運算符和常量的數量全然保持不變,嵌套數量也全然保持不變,但代碼變得明確多了 。
還可以更進一步,不用int數組表示單元格,而是另寫一個類 。該類包括一個名副其實的函數(稱為isFlagged),從而掩蓋住那個魔術數[1] 。于是得到函數的新版本:
public List<Cell> getFlaggedCells(){List<Cell> flaggedCells = new ArrayList<Cell>();for (Cell cell : gameBoard)if (cell.isFlagged())flaggedCells.add(cell);return flaggedCells;}
只要簡單改一下名稱,就能輕易知道發生了什么 。這就是選用好名稱的力量 。
— 02 —
避免誤導
程序員必須避免留下掩藏代碼本意的錯誤線索 。應當避免使用與本意相悖的詞,例如,hp、aix和sco都不該用作變量名,因為它們都是Unix平臺或類Unix平臺的專有名稱 。即便你是在編寫三角計算程序,hp看起來是一個不錯的縮寫[2],但那也可能會提供錯誤信息 。
別用accountList來指稱一組賬號,除非它真的是List類型 。List一詞對程序員有特殊意義 。如果包納賬號的容器并非真是一個List,就會引起錯誤的判斷 。
所以,用accountGroup或bunchOfAccounts,甚至直接用accounts都會好一些 。

推薦閱讀