Je voudrais écrire une méthode d'encapsulation pour un service Web, le service accepte 2 paramètres obligatoires et 3 paramètres facultatifs.
Pour avoir un exemple plus court, j'aimerais que le code suivant fonctionne
def myMethod(pParm1='1', pParm2='2') {
println "${pParm1}${pParm2}"
}
myMethod();
myMethod('a')
myMethod(pParm2:'a') // doesn't work as expected
myMethod('b','c')
La sortie est:
12
a2
[pParm2:a]2
a2
bc
Ce que je voudrais réaliser est de donner un paramètre et d'obtenir 1a
comme résultat. Est-ce possible (de la manière la plus paresseuse)?
Ne peut pas être fait tel quel ... Le code
def myMethod(pParm1='1', pParm2='2'){
println "${pParm1}${pParm2}"
}
Fondamentalement, groovy crée les méthodes suivantes:
Object myMethod( pParm1, pParm2 ) {
println "$pParm1$pParm2"
}
Object myMethod( pParm1 ) {
this.myMethod( pParm1, '2' )
}
Object myMethod() {
this.myMethod( '1', '2' )
}
Une alternative serait d'avoir une carte optionnelle comme premier paramètre:
def myMethod( Map map = [:], String mandatory1, String mandatory2 ){
println "${mandatory1} ${mandatory2} ${map.parm1 ?: '1'} ${map.parm2 ?: '2'}"
}
myMethod( 'a', 'b' ) // prints 'a b 1 2'
myMethod( 'a', 'b', parm1:'value' ) // prints 'a b value 2'
myMethod( 'a', 'b', parm2:'2nd') // prints 'a b 1 2nd'
Évidemment, documenter ceci pour que les autres sachent ce qui se passe dans la magie map
et les défauts sont laissés au lecteur ;-)
Vous pouvez utiliser des arguments avec des valeurs par défaut.
def someMethod(def mandatory,def optional=null){}
si l'argument "facultatif" n'existe pas, il devient null.