2012年9月29日 星期六

Groovy 的轉型

Groovy 的轉型寫為 as .
為什麼 Java 已經有轉型了,Groovy 還要發明一個 ? 舉個例子


String s = "this,is,a,book"
String[] arr = s.split(",");

你這個陣列用一用之後,突然後面的邏輯變了,你需要再動態 add 一些元素到這個已經拆開的陣列中,你也知道陣列在 Java 是不能隨意改變大小的,所以你只能再寫一些程式,把這個陣子轉成 List 後再處理。
我網路上隨便查了一些寫法 :

1.

List myList = new ArrayList();
String[] myStringArray = new String[] {"Java", "is", "Cool"};

Collections.addAll(myList, myStringArray);
2.
List<String> list = new ArrayList<String>(words.length);  
for (String s : words) {  
    list.add(s);  
}  
3.
List<String> ret = Arrays.asList( 裡面放字串陣列) 

好,無論怎樣,都只是在表達一件事而已,而且這些事對真正的程式邏輯來說毫不重要,不是商業邏輯的一部份。在 Groovy 來說仍舊是一行解決。

String s = "this,is,a,book"
def ret = s.split(",") as List

( 當然第一行是字串陣列不算啦 )
這樣的好處很多! 而且中間甚至可以加上型態轉換,例如我們上一集的例子

def id_array = list*.getId() as Integer[]

我們假設 list 裡是一堆 Book ,而且他的id 是字串型態,我後面的程式需要他的 id 以數字的方式,包在整數陣列裡面。

現在你看的懂了,在第一個方法呼叫後,得到的是List<String> ,但是我們要的其實是整數陣列 ( 對不起你的同事就是要整數陣列 ) ,你打幾個字便已輕舟過萬重山。

如果你的同事突然發瘋,他決定還是List<Integer> 好了,那你就把 Integer[] 槓掉改成 List 就收工。

請記住,程式的重點都是在解決一個問題,中間轉型或是換集合物件都沒有價值。這些沒有價值的事,就是要快速處理,敏捷開發,也要有敏捷的語言搭配才可以的 !




沒有留言:

張貼留言