Comme j'ai vu de nombreuses questions demandant des conseils pour jouer au golf dans leur langue, j'ai décidé de demander ma langue préférée: le groovy. Les gens peuvent donner quelques trucs et astuces qui seront utilisés dans le golf avec Groovy.
Comme j'ai vu de nombreuses questions demandant des conseils pour jouer au golf dans leur langue, j'ai décidé de demander ma langue préférée: le groovy. Les gens peuvent donner quelques trucs et astuces qui seront utilisés dans le golf avec Groovy.
Réponses:
Je suis nouveau dans ce domaine du golf, c'est ce que j'ai obtenu jusqu'à présent:
Utiliser les fermetures et non les fonctions:
def a (b) {imprimer b}
est plus long que
a = {l'imprimer}
Vous pouvez utiliser un index négatif dans les tableaux et les listes comme alias pour size () -
c = "abc" d = ["a", "b", "c"] affirmer c [c.size () - 1] == c [-1] affirmer c [c.size () - 2] == c [-2] affirmer d [d.size () - 1] == d [-1] affirmer d.last () == d [-1]
L'opérateur de propagation est un raccourci pour collecter:
affirmer d * .size () == d.collect {it.size ()}
Pour le tri, utilisez l'opérateur du vaisseau spatial:
e = [54,5,12]
assert e.sort{a,b->a<=>b}==e.sort{a,b->a<b?-1:+1}
assert e.sort{a,b->a<=>b}==e.sort{a,b->if (a>b) {return(-1)} else {return(+1)}}
Modifier les conversions:
assert "123" as int == "123".toInteger()
*.X
opérateur de propagation peut souvent s'écrire.X
Comme Groovy est un langage quelque peu bavard, vous pouvez utiliser Groovys MOP pour raccourcir les appels de méthode.
L'extrait suivant, par exemple, serait rentable après la quatrième utilisation:
''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)
Astuce pour jouer au golf:
0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)
Ou, vous savez:
r={(int)Math.random()*it}
r(12)
grep
est court et fonctionne sur plusieurs problèmesobtenir les caractères d'une chaîne sous forme de liste avec des espaces et sans éléments de tête: 'ABC XYZ'.grep()
renvoie[A, B, C, , X, Y, Z]
grep avec regexp est plus court que la conversion en majuscules, si nécessaire: it.grep(~/(?i)$c/)
au lieu deit.toUpperCase().grep(c)
'ABC XYZ'as Set
est un personnage plus court et travaille dans la plupart des mêmes endroits
Obtention d'un tableau à partir d'une liste d'objets
Si vous avez une liste d'objets comme:
def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]
Vous pouvez générer un ArrayList avec une certaine propriété en utilisant:
def userIds = users*.id // [1, 2, 3] no explicit loops!
BONUS: Groovy ... sur Rails!
Eh bien, dans Grails Framework, nous devons obtenir de nombreuses valeurs d'une sélection avec plusieurs attributs . Vous pouvez utiliser des boucles, aplatir et d'autres structures de programmation plus typiques, mais vous pouvez enregistrer certaines lignes. Si vous avez un choix comme:
<select id="users" multiple="true" name="users">
<option value="193">User A</option>
<option value="378">User B</option>
<option value="377">User C</option>
</select><%-- No Grails tags for now --%>
Ensuite, dans votre contrôleur, vous pouvez simplement écrire:
def aListOfUsers = User.getAll(params.list('userIds'))