メソッドへの引数の与え方
Javaと異なり,Groovyの場合,メソッドの引数の指定方法は二通り存在する.一つはJavaと同様に引数を列挙するやり方.もう一つはMapを使うやり方である.まず引数を列挙するやり方は以下の通りである.
//g1.groovy func "aaa","bbb" //二つの引数を持ったメソッドを呼出す def func(arg1,arg2){ //二つの引数を持ったメソッドを定義 println "arg1:${arg1}" println "arg2:${arg2}" } //end
Mapを使うと以下のようになる.
//g1.groovy func "aaa","bbb" //二つの引数を持った関数を呼出す println "---------------------" func arg1:"aaa",arg2:"bbb" //Mapとして引数を渡す def func(arg1,arg2){ //二つの引数を持ったメソッドを定義 println "arg1:${arg1}" println "arg2:${arg2}" } def func(args){ //一つのMap型の引数を持ったメソッドを定義 println "args.arg1:${args.arg1}" println "args.arg2:${args.arg2}" } //end
もし,引数が一つしかないメソッドを使おうとした場合,Map型の引数を持ったメソッドと引数の数が同じとなる.そのままでは,二つのメソッドを定義することはできない.そこで,引数の型を指定する.
//g1.groovy func "aaa","bbb" //二つの引数を持った関数を呼出す println "---------------------" func arg1:"aaa",arg2:"bbb" //Mapとして引数を渡す println "---------------------" func "aaa" //Mapも引数が一つなので,混乱する def func(arg1,arg2){ println "arg1:${arg1}" println "arg2:${arg2}" } def func(args){ //こっちに明示的にMapを指定しても良い.両方に型を指定しても良い println "args.arg1:${args.arg1}" println "args.arg2:${args.arg2}" } def func(String arg1){ //明示的に引数の型(String)を指定する func arg1,null } //end
クラスを使用しても,やり方は同じである.
class Foo{
void func(arg1,arg2){
println "arg1:${arg1}"
println "arg2:${arg2}"
}
void func(args){
println "args.arg1:${args.arg1}"
println "args.arg2:${args.arg2}"
}
void func(String arg1){ //明示的に引数の型(String)を指定する
func arg1,null
}
static void main(args){
foo=new Foo()
foo.func "aaa","bbb"
println "---------------------"
foo.func arg1:"aaa",arg2:"bbb"
println "---------------------"
foo.func "aaa"
}
}
なお,動作環境は以下の通りである.
- Groovy 1.0 beta7
- JDK 1.4.2_04
- Windows XP Professional Service Pack1