為什麼 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 就收工。
請記住,程式的重點都是在解決一個問題,中間轉型或是換集合物件都沒有價值。這些沒有價值的事,就是要快速處理,敏捷開發,也要有敏捷的語言搭配才可以的 !
沒有留言:
張貼留言