2012年5月15日 星期二

識別字名稱的長度該怎麼衡量?

識別字(identifier)
1.程式碼的可讀性
2.程式的自我解釋能力
3.容易維護
4.容易共享



錯誤範例 :
sdToStockInfoTCPBroadcastingServer 
變數的名稱的確叫人一目了然,一看就大概能夠意會它的作用,但是如果用這種命名的方式來寫程式,那速度可就大受影響了。

運用簡稱 
名稱最重要的目的,是讓讀者理解。閱讀程式碼時,其實是伴隨著一個context(語境)的。
有了這個語境的輔助,其實有些資訊可以省去,但讀者依然能夠理解。這個語境的道理,其實就跟我們一般生活中的文字書寫或對話是相同的。 

就好比,今早你的同事問了你一句:「昨天還好吧?」因為你昨天和他一塊喝酒喝到半夜三更,所以你會知道他在問的,多半是你昨天喝多了酒人有沒有怎樣,或者是回家有沒有被太太責備。你的同事不需要說:「昨天喝了那麼多酒,身體有沒有不舒服或回家有沒有被老婆責備?」之類的話。 

每一行程式碼,在程式中也都位在某個context之中。而每個識別字名稱所存活的程式碼範圍,也在位於某個context之中。當我們可以用這個名稱所在的context來做為閱讀的輔助時,那麼名稱本身所需要包含的資訊就可以降低。

public class ApplicationParser 

private Document buildDocument(String filename) 
throws Exception 

XPathFactory xpf = XPathFactory.newInstance(); 
XPath xp = xpf.newXPath(); 
DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
return db.parse((File) new File(fileName)); 



閱讀到這個函式時,你會因為它們的名稱太短,而無法理解這幾個變數是在做什麼嗎?其實不會,有一個很重要的關鍵,在於這個函式的長度很短,這幾個變數名稱存活的範圍(scope)都很小,而且這個context是確定的,目的就是把fileName所指定的XML檔案建構成一個Document物件。

但倘若你的函式長度很長(長度長的函式是不好的),那麼變數名稱就不見得能夠加以縮短了,因為一旦變數存在的scope變大,變數名稱所需要包含的資訊量也必須提高。你可以試想,某一個以短名形式定義的變數,它被定義的地點是在你所閱讀的程式碼的一百行以前,當你在一百行之後,再次讀到一個很短、又沒有太多意義的名稱時,你能回想起它實際的作用嗎?恐怕不太容易。 

範圍的大小,影響命名的講究程度


參考:
http://www.ithome.com.tw/itadm/article.php?c=68698

沒有留言:

張貼留言