使用類庫

崔鋼發表於2013-10-05

提倡使用類庫是我對於軟體質量保證的一個重要論點。其實在開發的過程中,我們不可避免的需要使用類庫,這一點和你使用什麼樣的程式語言無關。但是可能很多人無法意識到這一點,或者並不覺得類庫和語言有什麼不同。但是我們看看,具有豐富的類庫支援基本上是現代通用程式語言的一個基本特點。一般來說,基本的類庫一定回包含如下內容:檔案操作,和作業系統互動,提供一些通用的資料結構,比如線性表,棧,hash表等,還有字串的支援。

我們如果認真的回憶一下自己在程式設計中做的事情就會發現,與其說我們在用某種語言程式設計,不如說我們是在用某種語言提供的類庫程式設計。使用java的開發者,在這一點上,體會應該更加的明顯,因為如果沒有良好的類庫支援,java語言就其語言的特色來說,幾乎就乏善可陳了。而且你常用的很多方法和物件,比如System.out.println(),還有常用的String,都是類庫提供的支援。此外什麼servlet啦,jdbc啦,這些統統是類庫提供的支援。而且java語言第三方的類庫也是極其豐富的,甚至andrios系統的開發也可以看做是java的某一種類庫的使用。得益於這些類庫的支援,現在的java開發,幾乎是無所不能的,所以java是一種非常好的通用跨平臺語言,這個優勢幾乎無法被其他的語言所替代。所以我們可以發現很多流行的語言都有java的移植版本,比如python有jython,ruby有jruby,而且基於jvm的語言也很多,比如時下很流行的scala,clojure,groovy等。

儘可能的使用類庫,有很多好處。其一,bug少。因為類庫釋出的時候往往都會做好全面的測試,那麼它的bug肯定比你自己實現的要少。其二,程式碼容易閱讀,使用類庫,大量的邏輯被組織成類庫的api的形式表達,這樣如果熟悉類庫,很容易理解其操作,就算不熟悉類庫,由程式碼量的減少,也容易理解一些。第三,就是能夠有效的減少程式碼量,眾所周知,儘可能的減少程式碼量是提供程式碼質量的重要渠道。

如果這麼語言本身有這樣的類庫支援,我們就應該儘可能的利用類庫的功能,而不是自己通過一些演算法來實現。舉個例子:使用java語言如何反轉一個字串,比如“abc”,反轉成“cba”?通常的思路是首先用for迴圈把字串拆成一個字串陣列或者char陣列。這個時候你可能想到了substring方法,當然這個方法其實就出子String類的例項方法。但是這個想法本身就已經錯了,正確的反應應該是看看String類本身是不是有reverse方法。如果沒有那麼可以看看apache的commons類庫裡面是否有String的reverse支援。好吧,很不幸,你是在做面試題,而且沒有網際網路的支援,那麼尋找第三方類庫的方法其實是行不通的。那麼你也不應該使用substring,因為其實java的StringBuilder類中有reverse方法。具體做法如下:

 String in="abcdefg";
 StringBuilder builder=new StringBuilder(in);
 builder.reverse();
 in=new String(builder);

由於StringBulider是一個builder模式的實現,所以它的每一個方法都會返回例項本身,因此可以簡寫成一條語句:

String in="abcdefg";
in=new String(new StringBuilder(in).reverse());

當然你完全可以用for迴圈+if語句寫出一個極其複雜的實現。但我不認為那樣做會令你的面試加分。

複雜似乎能體現一個人的水平,其實這完全是一種錯誤的見解。恰恰相反,簡單才能體現一個人的水平,比如愛因斯坦的質能方程,並不複雜。歐姆定律,非常簡單。因此在開發的過程中不要事事都往復雜的方面去想。儘可能的利用類庫,就是這麼做的第一步。

相關文章