Groovy語言在方法的輸入參數方面做了很多有益的工作,這些工作有些能提高代碼的閱讀性,有些能 提供編碼的方便和敏捷。在前面的文字中,我們已經陸續的介紹過一些,如《Groovy探索之Map與DSL》 。在這個系列中,我們再把一些前面沒有提及的一一介紹過來。
首先,是關於調用方法時的括號的使用。
在Groovy語言的編碼中,我們可能已經很熟練的使用下面的語句:
println 'hello,world'
我們都知道,上面的語句相當於下面的語句:
println('hello,world')
這就是說明,在Groovy語言中,我們可以省略調用方法時的那對括號,這樣做的好處,第一是減少了 我們輸入括號的鍵盤敲擊,提高了編碼的快捷性;第二是提高了的代碼的閱讀性,這也是DSL的一個方面 。比如下面的語句:
def word = 'Are you ok?'
println word
就比"println(word)"的閱讀性好。
但是,值得注意的是,方法調用中的括號也不是可以隨意省略的。有些時候,省略會帶來編譯錯誤。 如下面的換行語句:
println()
就不能省略掉括號,寫成如下的樣子:
println
除此之外,下面的語句也是不能正常編譯的:
def list = [1,2,3,4]
def list2 = list.subList 0,1
但下面的語句卻又是可以編譯的:
def list1 = list.subList(0,1)
list.subList 0,1
總之,當你發現省略了方法調用中的括號時,出現編譯錯誤,你就應該把括號加上。
第二,Groovy語言中,關於方法參數的默認值的處理。
比如,我們有如下的一個方法:
def static add(i,j)
{
i+j
}
現在的要求是,在這個方法中,如果我們只輸入參數"i",那麼表示參數"j"為 默認值1。如果我們只輸入參數"j",那麼表示參數"i"為默認值0。如果兩個參數 都不輸入,那麼表示參數"i"為默認值0,參數"j"為默認值1。
要達到上面的要求,在Java語言中,我們必須再寫如下的三個方法:
def static add0(j)
{
add(0,j)
}
def static add1(i)
{
add(i,1)
}
def static add()
{
add(0,1)
}
這樣,如果我們想使用參數"i"的默認值,那麼就調用方法"add0";如果想使 用參數"j"的默認值,那麼就調用方法"add1";如果想調用兩個默認值,就調用最 後一個方法。
所以,在Java語言中,我們要達到上面的要求,我們必須寫四個方法。
在Groovy語言中,我們將不用那麼麻煩了。在Groovy語言中,我們引入了參數的默認值的概念,使得 我們完成上面的要求只需要一個方法就可以實現上面的多個方法。如下:
def static add(i=0,j=1)
{
i+j
}
有了上面的方法,我們就可以進行如下的調用:
println add()
println add(1)
println add(1,2)
第一個方法調用沒有輸入任何參數,表示使用兩個參數的默認值;第二個方法調用只有一個輸入參數 ,表示使用了參數"j"的默認值;第三個方法調用有兩個輸入參數,則不適用任何一個參數的 默認值。
上面代碼的運行結果為:
1
2
3
唯一有一點點遺憾就是沒有實現參數"i"為默認值,而參數"j"為非默認值的情 況。