Groovy Tip 32 方法的参数 一
??????????????????????? Groovy Tip 32 方法的参数 一 ? ? 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"为非默认值的情况。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |