在很不熟Groovy的時候,甚至可以把 Java 的寫法套進來。但是久了之後就會發現,Java 在一件簡單的事上,往往要很重覆的不斷寫上一樣的東西。
有些人會不屑的回應說,只是語法上的甜頭,不足掛齒。
其實這只看到表面。語法上的簡化、行數減少這是事實,不能否認,但好處為何?
- 行數少,bug 就少。100行出錯的機率一定比10行來的高。
- 行數少,程式的「自我描述性」就高。在 Java 中的五行,其實是在說一件事,但因為這5行會消耗你閱讀上的力氣,當行數越來越多的時候,你會很難抓住程式本身的重點。行數少,程式可以集中力氣在「表達」上,也就是易讀性會大大提升。
- 等下的例子會十分明顯。
假設我們需要得到全部的「書」,然後把他的 id 傳到 jsp 供應用…不管你程式寫幾行,或用任何的程式語言,中文來說就是這二件事,以傳統的Java 來說:
List<Book> book = session.createQuery("from Book").list();
//do something....
List<Integer> list_id = new ArrayList();
for(Book b : book){
list_id.add(b.getId());
}
request.setAttribute("id_list",list_id);
這個是我們每天在寫程式的時候做的事,雖然很囉嗦但是久了也習慣了。
Groovy 怎麼處理?
def book = Book.list()
//do something
["id_list", book*.getId() ]
啥?
對,就是你眼睛看到的。
*. 是什麼 ? 其實望文生義,就是「在這個集合裡的所有物件,都都呼叫這個方法,得到的值紀錄起來用List傳出來」。
這裡的 book 如 Groovy 第一行來說,已經是List <Book> 了
book*.getId() 在這裡就是說「 book裡全部的物件都呼叫getId() 並塞到另一個新的List 中」
於是這個繁瑣的過程就這樣結束了。如果臨時 ui 又需要 book 裡所有的作者
["author_list" , book*.getAuthor()]
馬上一行就可以解決並傳到前端去…
再一次說明,語法上的甜頭,並不是不重要的事,語法上的精簡,可以大大增加
- 易讀性
- 開發速度
- 減少出錯機率
沒有留言:
張貼留言